fix: Disable material expressive folder expansion animations

This commit is contained in:
Pun Butrach committed 2026-01-10 20:51:07 +07:00
1 parent 0ff9636c38
commit 9b90822395
2258 files changed
+165176 -78078

No files matched your search

+1 -4
View File
@@ -3,7 +3,7 @@ changelog:
labels:
- bot
authors:
- renovate
- renovate[bot]
- lawnchair-bot
- crowdin-bot
categories:
@@ -18,6 +18,3 @@ changelog:
- title: 🧹 Housekeeping
labels:
- housekeeping
- title: 🧑‍💻 Dependencies
labels:
- dependencies
-13
View File
@@ -6,17 +6,4 @@
labels: [
'dependencies',
],
packageRules: [
// Enable auto-merge for minor/patch updates.
{
matchUpdateTypes: [
'minor',
'patch',
],
automerge: true,
matchPackageNames: [
'/.*/',
],
},
],
}
+1 -1
View File
@@ -31,7 +31,7 @@ jobs:
- name: Build release APK
run: ./gradlew assembleLawnWithQuickstepGithubRelease bundleLawnWithQuickstepPlayRelease
- name: Upload artifact
uses: actions/upload-artifact@v6
uses: actions/upload-artifact@v5
with:
name: Release APK
path: build/outputs/*
+6 -5
View File
@@ -52,9 +52,9 @@ jobs:
echo ${{ secrets.KEYSTORE }} | base64 --decode > ${{ github.workspace }}/key.jks
fi
- name: Build debug APK
run: ./gradlew assembleLawnWithQuickstepGithubDebug assembleLawnWithQuickstepPlayDebug assembleLawnWithQuickstepNightlyRelease --no-configuration-cache
run: ./gradlew assembleLawnWithQuickstepNightlyRelease assembleLawnWithQuickstepGithubDebug assembleLawnWithQuickstepPlayDebug --no-configuration-cache
- name: Upload artifact
uses: actions/upload-artifact@v6
uses: actions/upload-artifact@v5
with:
name: Debug APK
path: build/outputs/apk/**/*.apk
@@ -89,7 +89,7 @@ jobs:
python -m pip install --upgrade pip
pip install gitpython requests
- name: Download artifact
uses: actions/download-artifact@v7
uses: actions/download-artifact@v6
with:
name: Debug APK
path: artifacts/debug-apk
@@ -118,13 +118,14 @@ jobs:
nightly-release:
runs-on: ubuntu-latest
if: github.repository_owner == 'LawnchairLauncher' && github.event_name == 'push' && github.ref == 'refs/heads/15-dev'
if: false
# if: github.repository_owner == 'LawnchairLauncher' && github.event_name == 'push' && github.ref == 'refs/heads/15-dev'
needs: build-debug-apk
permissions:
contents: write
steps:
- uses: actions/checkout@v6
- uses: actions/download-artifact@v7
- uses: actions/download-artifact@v6
with:
name: Debug APK
# Note the # and () symbols are not supported in GitHub Release filenames, even manually
+1 -1
View File
@@ -24,7 +24,7 @@ jobs:
upload_translations: false
upload_sources: true
download_translations: true
localization_branch_name: 15-dev-localization
localization_branch_name: 16-dev-localization
create_pull_request: true
base_url: 'https://lawnchair.crowdin.com'
env:
+1 -1
View File
@@ -26,7 +26,7 @@ jobs:
upload_translations: false
upload_sources: false
download_translations: true
localization_branch_name: 15-dev-localization
localization_branch_name: 16-dev-localization
create_pull_request: true
base_url: 'https://lawnchair.crowdin.com'
env:
+1 -1
View File
@@ -22,7 +22,7 @@ jobs:
upload_translations: false
upload_sources: true
download_translations: false
localization_branch_name: 15-dev-localization
localization_branch_name: 16-dev-localization
create_pull_request: false
base_url: 'https://lawnchair.crowdin.com'
env:
+3 -3
View File
@@ -55,7 +55,7 @@ jobs:
with:
subject-path: ${{ github.event.inputs.artifactName }}
- name: Upload artifact
uses: actions/upload-artifact@v6
uses: actions/upload-artifact@v5
with:
name: Release APK
path: ${{ github.event.inputs.artifactName }}
@@ -68,7 +68,7 @@ jobs:
steps:
- uses: actions/checkout@v6
- name: Download artifact
uses: actions/download-artifact@v7
uses: actions/download-artifact@v6
with:
name: Release APK
path: artifacts/release-apk
@@ -88,7 +88,7 @@ jobs:
steps:
- uses: actions/checkout@v6
- name: Download artifact
uses: actions/download-artifact@v7
uses: actions/download-artifact@v6
with:
name: Release APK
path: artifacts/release-apk
+2 -1
View File
@@ -1,3 +1,4 @@
[submodule "platform_frameworks_libs_systemui"]
path = platform_frameworks_libs_systemui
url = https://github.com/LawnchairLauncher/platform_frameworks_libs_systemui
url = https://github.com/BoringExperiments/platform_frameworks_libs_systemui
branch = 16-dev-qpr1
+344 -16
View File
@@ -17,7 +17,19 @@ package {
default_applicable_licenses: ["Android-Apache-2.0"],
}
min_launcher3_sdk_version = "30"
min_launcher3_sdk_version = "31"
// Targets that don't inherit framework aconfig libs (i.e., those that don't set
// `platform_apis: true`) must manually link them.
java_defaults {
name: "launcher-non-platform-apis-defaults",
static_libs: [
"android.os.flags-aconfig-java",
"android.multiuser.flags-aconfig-java",
"android.appwidget.flags-aconfig-java",
"com.android.window.flags.window-aconfig-java",
],
}
// Common source files used to build launcher (java and kotlin)
// All sources are split so they can be reused in many other libraries/apps in other folders
@@ -31,12 +43,156 @@ filegroup {
],
}
// Main Launcher source for compose, excluding the build config
filegroup {
name: "launcher-compose-enabled-src",
srcs: [
"compose/facade/enabled/**/*.kt",
"compose/facade/core/**/*.kt",
"compose/features/**/*.kt",
],
}
filegroup {
name: "launcher-compose-disabled-src",
srcs: [
"compose/facade/core/**/*.kt",
"compose/facade/disabled/**/*.kt",
],
}
filegroup {
name: "launcher-compose-test-helpers-src",
srcs: [
"compose/tests/com/android/launcher3/helper/TestHelper.kt",
],
}
filegroup {
name: "launcher-compose-ui-tests-src",
srcs: [], // Placeholder for compose/tests/com/android/launcher3/ui/.. tests.
}
// Tests for features that are enabled only when compose dependency is enabled & run as part of
// Launcher3Tests
filegroup {
name: "launcher-compose-unit-tests-src",
srcs: [
"compose/tests/com/android/launcher3/widget/AddWidgetConfigTest.kt",
],
}
filegroup {
name: "launcher-compose-tests-src",
srcs: [
"compose/tests/**/*.kt",
],
}
// Source code for quickstep build, on top of launcher-src
filegroup {
name: "launcher-quickstep-src",
srcs: [
"quickstep/src/**/*.java",
"quickstep/src/**/*.kt",
"quickstep/src/**/*.java",
],
device_common_srcs: [
":launcher-quickstep-processed-protolog-src",
],
}
filegroup {
name: "quickstep-compose-tests-src",
srcs: [
"quickstep/compose/tests/**/*.kt",
],
}
// Launcher ProtoLog support
filegroup {
name: "launcher-quickstep-unprocessed-protolog-src",
srcs: [
"quickstep/src_protolog/**/*.java",
],
}
java_library {
name: "launcher-quickstep_protolog-groups",
srcs: [
"quickstep/src_protolog/**/*.java",
],
static_libs: [
"protolog-group",
"androidx.annotation_annotation",
"com_android_launcher3_flags_lib",
],
}
java_genrule {
name: "launcher-quickstep-processed-protolog-src",
srcs: [
":protolog-impl",
":launcher-quickstep-unprocessed-protolog-src",
":launcher-quickstep_protolog-groups",
],
tools: ["protologtool"],
cmd: "$(location protologtool) transform-protolog-calls " +
"--protolog-class com.android.internal.protolog.common.ProtoLog " +
"--loggroups-class com.android.quickstep.util.QuickstepProtoLogGroup " +
"--loggroups-jar $(location :launcher-quickstep_protolog-groups) " +
"--viewer-config-file-path /system_ext/etc/launcher.quickstep.protolog.pb " +
"--output-srcjar $(out) " +
"$(locations :launcher-quickstep-unprocessed-protolog-src)",
out: ["launcher.quickstep.protolog.srcjar"],
}
java_genrule {
name: "gen-launcher.quickstep.protolog.pb",
srcs: [
":launcher-quickstep-unprocessed-protolog-src",
":launcher-quickstep_protolog-groups",
],
tools: ["protologtool"],
cmd: "$(location protologtool) generate-viewer-config " +
"--protolog-class com.android.internal.protolog.common.ProtoLog " +
"--loggroups-class com.android.quickstep.util.QuickstepProtoLogGroup " +
"--loggroups-jar $(location :launcher-quickstep_protolog-groups) " +
"--viewer-config $(out) " +
"$(locations :launcher-quickstep-unprocessed-protolog-src)",
out: ["launcher.quickstep.protolog.pb"],
}
prebuilt_etc {
name: "launcher.quickstep.protolog.pb",
system_ext_specific: true,
src: ":gen-launcher.quickstep.protolog.pb",
filename_from_src: true,
}
// Source code for quickstep dagger
filegroup {
name: "launcher-quickstep-dagger",
srcs: [
"quickstep/dagger/**/*.java",
"quickstep/dagger/**/*.kt",
],
}
// Source code for quickstep build with compose enabled, on top of launcher-src
filegroup {
name: "launcher-quickstep-compose-enabled-src",
srcs: [
"quickstep/compose/facade/core/*.kt",
"quickstep/compose/facade/enabled/*.kt",
"quickstep/compose/features/**/*.kt",
],
}
filegroup {
name: "launcher-quickstep-compose-disabled-src",
srcs: [
"quickstep/compose/facade/core/*.kt",
"quickstep/compose/facade/disabled/*.kt",
],
}
@@ -63,10 +219,130 @@ filegroup {
srcs: ["proguard.flags"],
}
soong_config_bool_variable {
name: "release_enable_compose_in_launcher",
}
// Opt-in configuration for Launcher3 code depending on Jetpack Compose.
soong_config_module_type {
name: "launcher_compose_java_defaults",
module_type: "java_defaults",
config_namespace: "ANDROID",
bool_variables: ["release_enable_compose_in_launcher"],
properties: [
"srcs",
"static_libs",
],
}
launcher_compose_java_defaults {
name: "launcher_compose_defaults",
soong_config_variables: {
release_enable_compose_in_launcher: {
srcs: [
":launcher-compose-enabled-src",
],
static_libs: [
"widget_picker_component",
// Compose dependencies
"androidx.compose.runtime_runtime",
"androidx.compose.material3_material3",
"androidx.compose.ui_ui-tooling-preview",
"androidx.compose.ui_ui-tooling",
],
// By default, Compose is disabled and we compile the ComposeFacade
// in compose/launcher3/facade/disabled/.
conditions_default: {
srcs: [
":launcher-compose-disabled-src",
],
static_libs: [],
},
},
},
}
soong_config_module_type {
name: "launcher_compose_tests_java_defaults",
module_type: "java_defaults",
config_namespace: "ANDROID",
bool_variables: ["release_enable_compose_in_launcher"],
properties: [
"srcs",
"static_libs",
],
}
launcher_compose_tests_java_defaults {
name: "launcher_compose_tests_defaults",
soong_config_variables: {
release_enable_compose_in_launcher: {
srcs: [
":launcher-compose-test-helpers-src",
":launcher-compose-unit-tests-src",
],
// Compose dependencies
static_libs: [
"widget_picker_component",
"androidx.compose.runtime_runtime",
"androidx.compose.ui_ui-test-junit4",
"androidx.compose.ui_ui-test-manifest",
],
conditions_default: {
srcs: [],
static_libs: [],
},
},
},
}
// Opt-in configuration for Launcher Quickstep code depending on Jetpack Compose.
soong_config_module_type {
name: "quickstep_compose_java_defaults",
module_type: "java_defaults",
config_namespace: "ANDROID",
bool_variables: ["release_enable_compose_in_launcher"],
properties: [
"srcs",
"static_libs",
],
}
quickstep_compose_java_defaults {
name: "quickstep_compose_defaults",
soong_config_variables: {
release_enable_compose_in_launcher: {
srcs: [
":launcher-quickstep-compose-enabled-src",
],
// Compose dependencies
static_libs: [
"androidx.compose.runtime_runtime",
"androidx.compose.material3_material3",
"androidx.compose.ui_ui-tooling-preview",
"androidx.compose.ui_ui-tooling",
],
// By default, Compose is disabled and we compile the ComposeFacade
// in compose/quickstep/facade/disabled/.
conditions_default: {
srcs: [
":launcher-quickstep-compose-disabled-src",
],
static_libs: [],
},
},
},
}
android_library {
name: "launcher-aosp-tapl",
libs: [
"framework-statsd",
"framework-statsd.stubs.module_lib",
],
static_libs: [
"androidx.annotation_annotation",
@@ -76,11 +352,14 @@ android_library {
"androidx.preference_preference",
"SystemUISharedLib",
"//frameworks/libs/systemui:animationlib",
"//frameworks/libs/systemui:contextualeducationlib",
"launcher-testing-shared",
],
srcs: [
"tests/tapl/**/*.java",
"tests/tapl/**/*.kt",
"tests/src_tapl_build_config/**/*.java",
"tests/src_tapl_build_config/**/*.kt",
],
resource_dirs: [],
manifest: "tests/tapl/AndroidManifest.xml",
@@ -141,7 +420,6 @@ android_library {
static_libs: [
"LauncherPluginLib",
"launcher_quickstep_log_protos_lite",
"android.os.flags-aconfig-java",
"androidx-constraintlayout_constraintlayout",
"androidx.recyclerview_recyclerview",
"androidx.dynamicanimation_dynamicanimation",
@@ -154,7 +432,11 @@ android_library {
"//frameworks/libs/systemui:iconloader_base",
"//frameworks/libs/systemui:view_capture",
"//frameworks/libs/systemui:animationlib",
"//frameworks/libs/systemui:contextualeducationlib",
"//frameworks/libs/systemui:mechanics",
"//frameworks/libs/systemui:msdl",
"SystemUI-statsd",
"WindowManager-Shell-shared-AOSP",
"launcher-testing-shared",
"androidx.lifecycle_lifecycle-common-java8",
"androidx.lifecycle_lifecycle-extensions",
@@ -163,8 +445,12 @@ android_library {
"kotlinx_coroutines",
"com_android_launcher3_flags_lib",
"com_android_wm_shell_flags_lib",
"android.appwidget.flags-aconfig-java",
"com.android.window.flags.window-aconfig-java",
"dagger2",
"jsr330",
"com_android_systemui_shared_flags_lib",
"launcher-dagger-qualifiers",
"launcher-executor-qualifiers",
"launcher-executors-module",
],
manifest: "AndroidManifest-common.xml",
sdk_version: "current",
@@ -172,6 +458,9 @@ android_library {
lint: {
baseline_filename: "lint-baseline.xml",
},
flags_packages: [
"com_android_launcher3_flags",
],
}
//
@@ -179,6 +468,10 @@ android_library {
//
android_app {
name: "Launcher3",
defaults: [
"launcher-non-platform-apis-defaults",
"launcher_compose_defaults",
],
static_libs: [
"Launcher3ResLib",
@@ -190,7 +483,7 @@ android_app {
],
optimize: {
proguard_flags_files: ["proguard.pro"],
proguard_flags_files: [":launcher-proguard-rules"],
// Proguard is disable for testing. Derivarive prjects to keep proguard enabled
enabled: false,
},
@@ -198,6 +491,7 @@ android_app {
sdk_version: "current",
min_sdk_version: min_launcher3_sdk_version,
target_sdk_version: "current",
plugins: ["dagger2-compiler"],
privileged: true,
system_ext_specific: true,
@@ -214,8 +508,12 @@ android_app {
"AndroidManifest-common.xml",
],
lint: {
extra_check_modules: ["Launcher3LintChecker"],
baseline_filename: "lint-baseline.xml",
},
kotlincflags: [
"-Xjvm-default=all",
],
}
// Library with all the dependencies for building quickstep
@@ -226,24 +524,35 @@ android_library {
"quickstep/res",
],
libs: [
"framework-statsd",
"framework-statsd.stubs.module_lib",
],
static_libs: [
"Launcher3ResLib",
"lottie",
"SystemUISharedLib",
"SettingsLibSettingsTheme",
"dagger2",
"protolog-group",
"displaylib",
],
manifest: "quickstep/AndroidManifest.xml",
min_sdk_version: "current",
lint: {
disabled_checks: ["MissingClass"],
},
}
// Library with all the source code and dependencies for building Launcher Go
android_library {
name: "Launcher3GoLib",
defaults: [
"launcher_compose_defaults",
"quickstep_compose_defaults",
],
srcs: [
":launcher-src",
":launcher-quickstep-src",
":launcher-quickstep-dagger",
"go/quickstep/src/**/*.java",
"go/quickstep/src/**/*.kt",
],
@@ -258,7 +567,10 @@ android_library {
"QuickstepResLib",
"androidx.room_room-runtime",
],
plugins: ["androidx.room_room-compiler-plugin"],
plugins: [
"androidx.room_room-compiler-plugin",
"dagger2-compiler",
],
manifest: "quickstep/AndroidManifest.xml",
additional_manifests: [
"go/AndroidManifest.xml",
@@ -267,19 +579,27 @@ android_library {
min_sdk_version: "current",
// TODO(b/319712088): re-enable use_resource_processor
use_resource_processor: false,
kotlincflags: [
"-Xjvm-default=all",
],
}
// Library with all the source code and dependencies for building Quickstep
android_library {
name: "Launcher3QuickStepLib",
defaults: [
"launcher_compose_defaults",
"quickstep_compose_defaults",
],
srcs: [
":launcher-src",
":launcher-quickstep-src",
":launcher-quickstep-dagger",
":launcher-build-config",
],
resource_dirs: [],
libs: [
"framework-statsd",
"framework-statsd.stubs.module_lib",
],
// Note the ordering here is important when it comes to resource
// overriding. We want the most specific resource overrides defined
@@ -291,18 +611,23 @@ android_library {
],
manifest: "quickstep/AndroidManifest.xml",
platform_apis: true,
plugins: ["dagger2-compiler"],
min_sdk_version: "current",
// TODO(b/319712088): re-enable use_resource_processor
use_resource_processor: false,
kotlincflags: [
"-Xjvm-default=all",
],
}
// Build rule for Quickstep app.
android_app {
name: "Launcher3QuickStep",
static_libs: ["Launcher3QuickStepLib"],
optimize: {
enabled: false,
proguard_flags_files: [":launcher-proguard-rules"],
enabled: true,
shrink_resources: true,
},
platform_apis: true,
@@ -316,7 +641,10 @@ android_app {
"Launcher2",
"Launcher3",
],
required: ["privapp_whitelist_com.android.launcher3"],
required: [
"privapp_whitelist_com.android.launcher3",
"launcher.quickstep.protolog.pb",
],
resource_dirs: ["quickstep/res"],
@@ -332,13 +660,11 @@ android_app {
}
// Build rule for Launcher3 Go app with quickstep for Android Go devices.
// Note that the following two rules are exactly same, and should
// eventually be merged into a single target
android_app {
name: "Launcher3Go",
static_libs: ["Launcher3GoLib"],
resource_dirs: [],
@@ -349,6 +675,7 @@ android_app {
optimize: {
proguard_flags_files: ["proguard.flags"],
enabled: true,
shrink_resources: true,
},
privileged: true,
@@ -372,9 +699,9 @@ android_app {
include_filter: ["com.android.launcher3.*"],
},
}
android_app {
name: "Launcher3QuickStepGo",
static_libs: ["Launcher3GoLib"],
resource_dirs: [],
@@ -385,6 +712,7 @@ android_app {
optimize: {
proguard_flags_files: ["proguard.flags"],
enabled: true,
shrink_resources: true,
},
privileged: true,
+11 -4
View File
@@ -65,9 +65,14 @@
android:protectionLevel="signatureOrSystem"
android:label="@string/permlab_write_settings"
android:description="@string/permdesc_write_settings"/>
<permission
android:name="${applicationId}.permission.GRID_CONTROL"
android:knownCerts="@array/grid_control_known_signers"
android:protectionLevel="signature|knownSigner"/>
<uses-permission android:name="${applicationId}.permission.READ_SETTINGS" />
<uses-permission android:name="${applicationId}.permission.WRITE_SETTINGS" />
<uses-permission android:name="${applicationId}.permission.GRID_CONTROL" />
<application
android:backupAgent="com.android.launcher3.LauncherBackupAgent"
@@ -137,11 +142,13 @@
android:readPermission="${applicationId}.permission.READ_SETTINGS" />
<!--
The content provider for exposing various launcher grid options.
TODO: Add proper permissions
-->
The content provider for exposing various launcher grid options.
The caller should hold one of the following permissions:
- android.permission.BIND_WALLPAPER
- ${applicationId}.permission.GRID_CONTROL
-->
<provider
android:name="com.android.launcher3.graphics.GridCustomizationsProvider"
android:name="com.android.launcher3.graphics.LauncherCustomizationProvider"
android:authorities="${applicationId}.grid_control"
android:exported="true" />
+18
View File
@@ -28,6 +28,10 @@
Refer comments around specific entries on how to extend individual components.
-->
<!-- Permission required to start a WidgetPickerActivity. -->
<permission android:name="${applicationId}.permission.START_WIDGET_PICKER_ACTIVITY"
android:protectionLevel="signature|privileged" />
<application
android:name="app.lawnchair.LawnchairApp"
android:backupAgent="com.android.launcher3.LauncherBackupAgent"
@@ -63,6 +67,7 @@
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<action android:name="android.intent.action.SHOW_WORK_APPS" />
<action android:name="android.intent.action.ALL_APPS" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.MONKEY"/>
@@ -73,5 +78,18 @@
android:value="${packageName}.grid_control" />
</activity>
<activity android:name="com.android.launcher3.widgetpicker.WidgetPickerActivity"
android:theme="@style/WidgetPickerActivityTheme"
android:excludeFromRecents="true"
android:autoRemoveFromRecents="true"
android:launchMode="singleTop"
android:exported="true"
android:configChanges="orientation|screenSize|screenLayout|smallestScreenSize"
android:permission="${applicationId}.permission.START_WIDGET_PICKER_ACTIVITY">
<intent-filter>
<action android:name="android.intent.action.PICK" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
</application>
</manifest>
+34 -39
View File
@@ -17,6 +17,10 @@ feel free to reach out on [Telegram][telegram] or [Discord][discord].
> 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
@@ -40,13 +44,13 @@ For translations, please visit **[Lawnchair on Crowdin][crowdin]**.
2. Open the project in Android Studio.
3. Select the `lawnWithQuickstepGithubDebug` build variant.
If you encounter errors with the `iconloaderlib` or `searchuilib` modules, run
`git submodule update --init --recursive`.
If you encounter errors with modules that ends with `lib` suffix like `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
`15-dev`.
`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]
@@ -57,10 +61,12 @@ Here are some contribution tips to help you get started:
### 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)
@@ -69,7 +75,7 @@ Here are some contribution tips to help you get started:
### 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 `15-dev` branch.
change depends on its complexity and risk. All PRs should target the `16-dev` branch.
| Tier | Definition | Examples | Protocol |
|-----------------------------|-------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
@@ -88,8 +94,7 @@ We follow the **[Conventional Commits specification][conventional-commits]**.
### Versioning scheme
As of Lawnchair 15 Beta 1, Lawnchair’s version code is composed of four parts, separated by
underscores:
Lawnchair’s version code is composed of five parts, separated by underscores:
<p align="center">
<picture>
@@ -101,39 +106,21 @@ underscores:
1. Android major version
2. Android minor version
3. Lawnchair development status
3. Lawnchair development stage
4. Lawnchair development version
5. Revision/Release number
#### Android major & minor versions
#### Lawnchair development stage
These represent the Android version in which Lawnchair is based on.
They make up the first two parts of the version code:
This table show list of development stages in use by Lawnchair:
- Major version: Indicates the main Android version.
- Minor version: Reflects any point release or update within the major version.
Example: Android 11 will be `11_00_XX_XX` while Android 12.1 will be `12_01_XX_XX`.
#### Development status & version
The third and fourth parts of the version code refer to Lawnchair's development stage
and the specific version within that stage:
- Development status: Shows the current development stage of the Lawnchair build (e.g., Alpha,
Beta).
- Development version: Specifies the incremental version within the same development stage.
The table below shows release phase used by Lawnchair:
| Status | Stage |
|-------------------|-------|
| Development | 00 |
| Alpha | 01 |
| Beta | 02 |
| Release Candidate | 03 |
| Release | 04 |
Example: Alpha 5 will be `XX_XX_01_05` and Beta 3 will be `XX_XX_02_03`.
| Stage | Denote |
|-------------------|--------|
| Development | 00 |
| Alpha | 01 |
| Beta | 02 |
| Release Candidate | 03 |
| Release | 04 |
### String naming
@@ -154,25 +141,33 @@ Strings `names` in `strings.xml` should follow this format:
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.
To update Lawnchair's font listing, follow these steps:
To update Lawnchair’s font listing, follow these steps:
1. Acquire
1. Get
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.
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
[nightly]: https://github.com/LawnchairLauncher/lawnchair/releases/tag/nightly
[security-report]: https://github.com/LawnchairLauncher/lawnchair/security/advisories/new
[security-policy]: https://github.com/LawnchairLauncher/lawnchair/security/policy
[bug-reports]: https://github.com/LawnchairLauncher/lawnchair/issues/new?assignees=&labels=bug&projects=&template=bug_report.yaml&title=%5BBUG%5D+
[feature-requests]: https://github.com/LawnchairLauncher/lawnchair/issues/new?assignees=&labels=feature%2Cenhancement&projects=&template=feature_request.yaml&title=%5BFEATURE%5D+
[code-of-conduct]: CODE_OF_CONDUCT.md
[crowdin]: https://lawnchair.crowdin.com
[kotlin-coding-conventions]: https://kotlinlang.org/docs/coding-conventions.html
[lawnchair-package]: https://github.com/LawnchairLauncher/lawnchair/tree/15-dev/lawnchair
[src-package]: https://github.com/LawnchairLauncher/lawnchair/tree/15-dev/src
[lawnchair-package]: https://github.com/LawnchairLauncher/lawnchair/tree/16-dev/lawnchair
[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
+389 -38
View File
@@ -1,47 +1,398 @@
> [!TIP]
> For the story behind this release, see [the announcement](https://lawnchair.app/blog/lawnchair-15-beta-1) on our website.
# Bubble Tea
Lawnchair 15 Beta 1 is a foundational release based on Launcher3 from Android 15. This version works with QuickSwitch from Android 10 to Android 15 QPR1. Higher Android versions are not yet supported.
## Bubble Tea [QPR1]
### New Features
* **Android 15 Support:** Includes core platform features like Private Space and App Archiving.
* **App Drawer Folders:** A major new way to organize your app drawer.
* **Manual Folders:** Create, edit, and re-arrange your own custom folders.
* **Automatic Organization ("Caddy"):** An experimental feature to automatically categorize your entire app drawer into smart folders.
* **Dock Enhancements:**
* Add a background to the dock with options for color and corner radius.
* Place widgets directly in the dock.
* Show icon labels for apps in the dock.
* **Wallpaper Carousel:** A new pop-up menu item to quickly switch between your current and recent wallpapers, similar to the Pixel Launcher.
* **App Pausing:** For rooted users with QuickSwitch, you can now manually pause applications directly from the launcher.
* **Expanded Search Options:**
* Add custom search engines for web suggestions in the app drawer.
* New web search providers added, including Ecosia, Kagi, Firefox, Iceraven, and Mull.
* **"Deck" (Experimental):** An initial implementation of a "no app drawer" mode. *Please create a launcher backup before trying this feature to prevent data loss.*
### 🏗️ Development 4 Release 1 (Draft)
### Improvements
* **UI:** Updated many UI components to better align with Material 3 design principles.
* **Gestures:** Added "Open Recents Screen" and "Open Assistant" as new gesture actions.
* **Pop-Up Menu:** The long-press menu options can now be reordered.
* **Settings:** Reorganized many settings for a more intuitive experience and centralized all search-related settings into a single screen.
aka: Snapshot 10
### Core & Under-the-Hood
* **Type-Safe Navigation:** The settings infrastructure has been rewritten using modern Jetpack Compose Navigation for enhanced stability.
* **Build & Dependency Updates:** Major updates to dependencies and build scripts improve performance and maintainability.
* **New Translations:** Translations have been updated from Crowdin.
* **Nightly Builds:** A formal nightly build system is now in place for easier access to development versions.
* **Crash & Bug Fixes:** Implemented numerous fixes for various OEM skins (Lenovo, Motorola), custom ROMs, and older Android versions.
Bug fixes only
### Regressions & Known Issues
* **Icon Badges:** Icon badges for work profile apps are temporarily non-functional due to core changes in the A15 rebase. This is a high-priority item for a future update.
* **'Customize Icon' State:** The bottom sheet for customizing an icon may not update its state immediately. Restarting the launcher will apply the change.
* **App Drawer folders:** As of now, you can't edit app drawer folders from the app drawer. Please visit the settings screen to change the contents of each folder.
Build: BD4.2311 (latest), BS10.2111, BS10.2011
Other issues that you may encounter can be found at [our FAQ](https://lawnchair.app/faq/#common-issues).
Compatibility list:
### Community & Thanks
This release marks a new chapter in how we engage with our community. We recently formed the **Lawnchair Triage Team**, a group of dedicated volunteers who have already begun the massive task of organizing our issue tracker. Their early efforts have been invaluable in helping us focus development.
| 🏗️ Crash | 💫 Limited features | 🥞 Fully supported |
|-------------|---------------------|--------------------|
| Android 8.1 | | Android 12.0 |
| Android 9 | | Android 12.1 |
| Android 10 | | Android 13 |
| Android 11 | | Android 14 |
| | | Android 15 |
| | | Android 16 |
Thanks as well to all the people who have [donated to our Open Collective](https://opencollective.com/lawnchair) and [submitted translations on Crowdin](https://lawnchair.crowdin.com/).
And, as always, a huge thanks to all our code contributors for this cycle: @validcube, @Morty0Smith, @benjaminkitt, and @tgex0
#### Features
* [Launcher] Move to Google Sans Flex font (TODO)
* [Lawnchair] Material 3 Expressive Settings (Phase 2, TODO)
* [Lawnchair] Better At-a-Glance perceptive wallpaper colour luminance detection
* Big word that means Lawnchair will take system default hint bright/dark theme and fallback to luminosity detection for bright/dark mode detection in At a Glance.
~~* [Launcher] Enable Material Expressive Folder Expansion animation flag~~
* Disabled due to rendering bugs
* [Launcher/Font] Variable font for Launcher3 (????????)
* [Launcher/Popup] Dynamically get app widget popup icon
* [Launcher] Foldable support (actually real)
#### Fixes
* [Launcher] Fix a lot of internal basic functionality
* [Lawnchair] Re-added some Lawnchair-specific code
* [Launcher] Fix workspace navigation
* [Launcher] Fix allapps navigation
* [Launcher] Fix folder navigation
* [Launcher] Support Android 12.0/12.1/13/14/15
* [Lawnchair/Smartspace] At-a-Glance can't launch activity due to background startup restrictions on Android 14 and above
* [Launcher] Use Lawnchair theming colour for allapps
* [WM-Shell] Fix conflict with prebuilts aidl, make Release build work again
* [Launcher/Desktop] Correct deviceHasLargeScreen check for Baklava
* [Lawnchair/Search] Make search layout changes work
* [Lawnchair/Smartspace] Allow disabling the smartspace feature
### 🥞 Snapshot 9 (Development 4 Release 1)
This snapshot marks the first time Bubble Tea QPR1 is able to assemble the APK without errors,
all that's left is bug bash testing. Limited visibility closed testing is available.
Build: BS9.2011
This is a developer-focused change log:
* Re-added searchuilib
* SearchUiLib updated to latest commits before being private
* Exclude disabled variant of Compose launcher3 features
* Fix all errors in Lawnchair side
### Snapshot 8 (Development 4 Release 1)
Build: BS8.1811
This snapshot marks the first time Bubble Tea QPR1 is able to compile ALL of the Launcher3 code
without errors, that leaves Lawnchair code as the remaining task before successfully compiling
Bubble Tea QPR1
This is a developer-focused change log:
* Migrate some functions to new changes
* WM-Shell (and WM-Shell Shared) updated to Android 16-0.0_r3 (Android 16.0.0 Release 3)
* Add Mechanics (SystemUI Platform Library)
* Some unresolved reference in Lawnchair code
### Snapshot 7 (Development 4 Release 1)
Build: BS7.1711
This snapshot marks the first time Bubble Tea QPR1 is able to pass KSP build stage without any
hiccups, the next 1 or 2 snapshots will be focusing on compilation stage, which should be the last
stage before we can get started on pE Development 4.
This is a developer-focused change log:
* Codebase updated to Android 16-0.0_r3 (Android 16.0.0 Release 3)
* Prebuilt updated to Android 16-0.0_r3 (Android 16.0.0 Release 3)
* Platform libs updated to Android 16-0.0_r3 (Android 16.0.0 Release 3)
* Move ViewCapture to platform lib
* Add Displaylib
* Flags updated to Android 16-0.0_r3 (Android 16.0.0 Release 3)
* Pull concurrent, dagger (the launcher3) as module
* TODO? We might need to migrate it to build source like compose instead
* Lots of prebuilt documentations update
* Add compose as part of launcher3 build source
* Removed test because I hate configuration gradle
* cc: @validcube fix me, cc: too bad
## Bubble Tea [r2]
Lawnchair 16 pE Development 3 is here! Contributors are encouraged to target this branch instead of
older (i.e., Lawnchair `15-dev`).
### 🥞 Development 3 Release 2
Build: BD3.2211
Compatibility list:
| 🏗️ Crash | 💫 Limited features | 🥞 Fully supported |
|-------------|---------------------|--------------------|
| Android 8.1 | | Android 12.0 |
| Android 9 | | Android 12.1 |
| Android 10 | | Android 13 |
| Android 11 | | Android 14 |
| | | Android 15 |
| | | Android 16 |
#### Features
* [Lawnchair] Updated screenshots compressions and fastlane screenshot
* [Lawnchair] Features from Lawnchair 15-dev
#### Fixes
* [Lawnchair] Conflict from Lawnchair 15-dev
### Development 3 Release 1
Build: BD3.1711
The biggest change log ever, this marked the end of Bubble Tea [r2] branch as future development
switched to Bubble Tea [QPR1]. See you at Snapshot 7 or Development 4!
(Again) Originally going to launch D3 if most of the issue on tracker have been resolved, but hit a
stability milestone instead.
This release includes 4 new features, and 33 bug fixes,
Reimplemented some of Lawnchair features, better sizing of home screen, updated README.md screenshot
and the inclusion of Bubble Tea project into the official Lawnchair repository as 16-dev!
This release have been tested with:
* ☁️ Pixel 6 (Android 12.0)
* 📱 Nothing (3a)-series (Android 15, Android 16.0)
* 📱 Vivo Y21 (Android 12.0)
* 📱 HTC Wildfire E3 lite (Android 12.0)
* Many more! Unfortunately I only count build from pE Open testing!
Compatibility list:
| 🏗️ Crash | 💫 Limited features | 🥞 Fully supported |
|-------------|---------------------|--------------------|
| Android 8.1 | | Android 12.0 |
| Android 9 | | Android 12.1 |
| Android 10 | | Android 13 |
| Android 11 | | Android 14 |
| | | Android 15 |
| | | Android 16 |
> [!NOTE]
> QuickSwitch compatibility have not been tested at any time during the development of Bubble Tea!
#### Features
* [Lawnchair] Complex Clover icon shape
* [Lawnchair] Very Sunny icon shape
* [Lawnchair/Font] Update Google Fonts listing to 25102025
* [Lawnchair/Gesture] Allow Open Quick Settings*
#### Fixes
* Disable OEM override on launcher settings, (reimplement `ENABLE_AUTO_INSTALLS_LAYOUT` | c51b2a221838aefb610b7146fc4ef7cb34e5e495)
* [Lawnchair/Iconloaderlib] Reimplement custom app name
* [Lawnchair] Reimplement Launcher3 debug page
* [Lawnchair] Reimplement Caddy and App drawer folder
* [Lawnchair] Reimplement Hotseat toggle
* [Lawnchair] Reimplement Favorite application label
* [Lawnchair] Hotseat positioning with favorite icon label enabled placed the same even if label is disabled
* [Lawnchair] Hotseat background now have a reasonably sized margin compared to D2
* [Lawnchair] Qsb sizing now correctly estimate the width based on width of the app/widget layout or DeviceProfile on device with inlined Qsb
* [Lawnchair] Reimplement Allapps opacity configuration
* [DeviceProfile] Crash from createWindowContext on less than Android 12.0
* [QuickstepLauncher] Ignore trying to set SystemUiProxy icon sizes on less than Android 12.1
* [Lawnchair/BlankActivity] Apply Material 3 Expressive button animations
* [Launcher] Disable add widget button if home screen is locked
* [Lawnchair/Iconloaderlib] Crash when trying to set `null` monochrome icon on less than Android 12.1
* [SystemUI/Unfold] Crash when getting configuration for foldable-specific resources
* [Lawnchair/Iconloaderlib] Don't parse monochrome drawable in Android 12.1 or less
* [Launcher3/AllApps] Allow theming of Expressive allapps
* ~~[Lawnchair] Lawnchair can now be compiled in release mode~~
* [Lawnchair] Fix crashes with WM-Shell
* [Lawnchair] Bottom sheet blur will only trigger when your device supported blur*
* [Lawnchair/Lazy] Corner radii of lazy component now matched radius of non-lazy*
* [Lawnchair/Debug] Cleanup the debug menu*
* [Lawnchair/Docs] Warn off danger using 16-dev branch*
* [Launcher3] Crash with predictive back on some device using Android 13/14
* [Launcher3] WindowInsets crash in Android 11
* [Launcher3] Widgets crash on some device using Android 12
* [Launcher3/PrivateSpace] Use custom icons of Private Space lock*
* [Launcher3/Iconloaderlib] App badges for work profile*
* [Lawnchair] Update spacing for dock search settings*
* [Launcher3] Quickstep dispatcher crash on Android 13
* [Launcher3] Crash due to missing resources for Android 8.0
* [Lawnchair/Docs] Update screenshot to 16-dev
### 🥞 Development 2
Originally going to launch D2 if most of the comestic bug fixes have been resolved, but hit a
stability milestone instead.
This release includes 15 new features, and 20 bug fixes,
Lawnchair settings now takes shape of initial material 3 expressive redesign, [(but by no mean finish!)][Lawnget]
launcher should now render icons better than D1 milestone, with auto-adaptive icons feature reimplemented.
This release have been tested with:
* ☁️ Pixel 6 (Android 12.0) - Build: Ad-hoc
* ☁️ Pixel 6a (Android 12.1) - Build: Ad-hoc
* ☁️ Pixel 7 (Android 13) - Build: Ad-hoc
* ☁️ Pixel 9 (Android 15, Android 16.0) - Build: Ad-hoc
* ☁️ Pixel 9 Pro Fold (Android 14, Android 15) - Build: Ad-hoc
* ☁️ Vivo V40 (Android 15) - Build: Ad-hoc
* ☁️ Xiaomi MIX (Android 15) - Build: Ad-hoc
* 📱 Nothing (3a)-series (Android 15) - Build: pE-`15102025`
* 📱 Pixel 9 Pro XL (Android 16.0 QPR2 Beta 2) - Build: pE-`02102025`
* 📱 BLU View 5 Pro (Android 14) - Build: pE-`02102025`
* 📱🔥 Vivo Y21 (Android 12.0) - Build: pE-`08102025`
> [!NOTE]
> QuickSwitch compatibility have not been tested at any time during the development of Bubble Tea!
[Lawnget]: https://www.google.com/teapot
Compatibility list:
| 🏗️ Crash | 💫 Limited features | 🥞 Fully supported |
|-------------|---------------------|--------------------|
| Android 8.1 | Android 12.0 | Android 12.1 |
| Android 9 | | Android 13 |
| Android 10 | | Android 14 |
| Android 11 | | Android 15 |
| | | Android 16 |
#### Features
* Enable All Apps Blur Flags on Phone (oops, forgot about the allAppsSheetForHandheld flag)
* Make Safe Mode check more reliable
* Smartspace Battery now reports battery charging status of Fast (more than 90% of 20 W) and Slow (less than 90% of 5 W) charging
* Show pseudonym version to Settings
* Resizing workspace calculate items position more accurately
* Update Lawnchair default grid size to 4×7 (or 4×6 with smartspace widget)
* Reimplement Hotseat background customisation
* Make haptic on a locked workspace use Google MSDL vibration
* Make Launcher3 colour more accurate to upstream Android 16
* ProvideComposeSheetHandler now have expressive blur
* Lawnchair Settings now uses Material 3 Expressive
* Animate keyboard on/off state on app drawer search (Try enabling automatically show keyboard in app drawer settings and swipe up and down or directly tap “Apps list” in popup menu) -> (Backport not possible)
* Add LeakCanary check to all debug variant of the application
* [DEBUG] Launcher3 feature status diagnostic check in debug menu
* [Documentation] Add more visibility into both app certificate and SLSA verification for app authenticity check [VERIFICATION.md](VERIFICATION.md)
* [Documentation] Initial drafting of Improve documentation v6 (pave-path)
* [Launcher] Widget animations during resize
* [Iconloaderlib] Enable second hand for the clock app
#### Fixes
* Fix unable to access preview for icon style
* Popup's Arrow Theme now has the correct theme
* Widget should open normally after a workaround (C7evQZDJ)
* Fix (1) Search bar and Dock, (2) Folders and App Drawer settings didn't open due to init problems
* Lawnchair should hopefully remember what grid they should be using
* Most if not all of Lawnchair settings should be usable without crashes
* Correct Baseline Profile from old `market` to `play` variant, and now should calculate profile for `nightly`
* Fix Private Space crash when Lawnchair is set as Launcher due to flags only available on A16
* Fix crash on a device with strict export receiver requirements on A14
* Interactable widget crashing due to App Transition Manager being null (C7evQZDJ)
* Icon not responding to mouse cursor -> (Backported to Lawnchair 15)
* Rare NoSuchMethodError crash on IMS canImeRenderGesturalNavButtons
* [Lawnchair] Reimplement Bulk icons toggle
* SettingsCache crashing with SecurityException with unreadable keys (@hide) in Android 12 and newer (assume false)
* Assume flags `enableMovingContentIntoPrivateSpace` is false when ClassNotFoundException on Android 16 devices
* Rare NoSuchMethodError crash on SurfaceControl setEarlyWakeupStart and setEarlyWakeupEnd
* Properly align built-in smartspace in workspace
* Use WM Proxy from Lawnchair instead of System, fix Android 8.1/9/10/11/12.0/12.1 regarding SE, NSME like SystemBarUtils -> (dWkyIGw9), (reworked CllOXHJv)
* LawnchairWindowManagerProxy have been migrated to Dagger
* SystemWindowManagerProxy have been left unused
* [Lawnchair/Iconloaderlib] Update CustomAdaptiveIconDrawable to latest AOSP 13
* [Iconloaderlib] Reset most of the changes to favour more AOSP 16_r02 code then Lawnchair (need rewrite)
* fix icon loaded in monochrome and always monochrome when it is not supposed to
* fix notification dots being twice the size with notification count
* [Lawnchair/Iconloaderlib] Reimplement Lawnchair Iconloaderlib (adaptive icons, monochrome, regular icon)
#### Known Bugs
* Preview can't show device wallpaper -> (lIxkAYGg)
* IDP Preview doesn't refresh on settings change -> workaround is to hit apply and re-open the preview -> (ZbLX3438)
* Workspace theme doesn't refresh until restart -> (ZbLX3438) -> Fixed as part of (31lLEflf, 1MevNrzp)
* Lawnchair Colour can't handle restart causing default colour to be used instead -> Fixed? -> Properly fixed as part of (31lLEflf, 1MevNrzp)
* (Investigating) Work profile switch on widget selector *may* have reverted to Lawnchair 15 style
* Full lists: https://trello.com/b/8IdvO81K/pe-lawnchair
### Development 1
First development milestone! Basic launcher functionality should be stable enough.
* Make Lawnchair Launcher launchable in Android 12.1, 13, 14, 15, 16
* Remove two deprecated features (Use Material U Popup, and Use dot pagination)
* Add pseudonym version in debug settings
* Adapt Lawnchair code to Launcher3 16
* Make basic features of Launcher work (App Drawer, Home Screen, Search, Folders, Widgets)
* Enable Material Expressive Flags (Try swiping through launcher page)
* Enable All Apps Blur Flags (Try opening All Apps on supported devices)
* Enable MSDL Haptics Feedback Flags (Try gliding widget or icons across the homescreen)
* Make Predictive Back Gesture work on Android 13, 14, 15, 16 (Try swiping left or right on gesture-based navigational)
* Programmatically set Safe Mode status
#### Known Bugs
* App Icon may sometimes render with less than 0 in height/width causing blank icon to be rendered and crashing ISE on customising icons -> (31lLEflf)
* Any Lawnchair settings using IDP will crash the launcher -> Fixed in Lawnchair 16 pE Development 2
* Icon pack isn't usable -> (DXo69Qzd)
* Dynamic icons will not be themed by launcher
* Full lists: https://trello.com/b/8IdvO81K/pe-lawnchair
### Snapshot 6
This is a developer-focused change log:
This snapshot marks the first time Lawnchair 16 is able to compile and build an APK!
* Fix all issues with Java files in both `lawn` and `src`
* Make Lawnchair compilable (with instant crash)
* Move to KSP for Dagger code generation
### Snapshot 5
This is a developer-focused change log:
This snapshot now able to compile all sources (Kotlin files only)
* Fix MORE MORE MORE `lawn` issues
* Use Gradle Version Catalog for consistent dependency version across all modules (Full implementation @ LawnchairLauncher/Lawnchair#5753)
* Magically fix ASM Instrumentation issues (I didn't do anything, it just works now)
* Fix ALL the issues in kotlin stage (`compileLawnWithQuickstepNightlyDebugKotlin`)
* Reintroduce some features from Lawnchair
* Add compatibility checks and workarounds for them
* Fix most issues with Java files in both `lawn` and `src`
### Snapshot 4
This is a developer-focused change log:
This snapshot marks the first time Lawnchair 16 is able to compile all Launcher3 sources!
* Add `MSDLLib` to `platform_frameworks_libs_systemui`
* Add `contextualeducationlib` to `platform_frameworks_libs_systemui`
* Fix issues in both `lawn` and `src` modules
* Fix AIDL sources
* Resolve Lawnchair/LC-TODO lists
* Merge `wmshell.shared` res with res from `wmshell`
* Consistent build reproducibility by specifying dependencies in `build.gradle`
* Some ASM Instrumentation issues (and re-add some…)
* Update documentations
### Snapshot 3
This is a developer-focused change log:
Not a lot of errors left to go!
* Finish correctly implementing all Dagger functions (?)
* Merge Lawnchair 15 Beta 1 into Bubble Tea
* Support for 16-kb page size devices
* Repository rebased and dropped commit
* Switch back from turbine-combined variant to javac variant for prebuilt SystemUI-core-16 because issues with LFS
* MORE MORE fixes regarding turbine-combined to javac
* Publish `platform_frameworks_libs_systemui` to pe 16-dev branch
* ATLEAST check to almost every launcher3 source file
* `Utils` module (stripped)
* Fix Dagger duplicated classes (because of Dagger dependency ksp/kapt mixing)
* Build reproducibility improvements by specifying dependencies in `build.gradle` files
* Fix some of the issues in both `lawn` and `src` modules
### Snapshot 2
This is a developer-focused change log:
This snapshot milestone marked the first time Lawnchair now able to compile all supplementary
modules, `src` + `lawn` will be in Snapshot 5 or Development 1 milestone.
* Merge flags
* Fix some issues with launcher3 sources.
* A temporary workaround with framworks.jar not adding in anim module.
* Shared not having access to animationlib.
* **Switch from javac variant to turbine-combined variant for prebuilt SystemUI-core-16**.
### From Initial snapshot 0 and 1
This is a developer-focused change log:
* Prebuilt updated to Android 16-0.0_r2 (Android 16.0.0 Release 2)
* Submodule have also been refreshed to A16r2
* Baklava Compatlib (QuickSwitch compatibility not guaranteed)
* Refreshed internal documentation like prebuilt, systemUI
+30 -7
View File
@@ -6,11 +6,8 @@
adamcohen@google.com
hyunyoungs@google.com
twickham@google.com
vadimt@google.com
winsonc@google.com
jonmiranda@google.com
awickham@google.com
agvard@google.com
# Launcher workspace eng team
@@ -23,19 +20,22 @@ fransebas@google.com
pinyaoting@google.com
andonian@google.com
sihua@google.com
abegovic@google.com
# Multitasking eng team
tracyzhou@google.com
peanutbutter@google.com
jeremysim@google.com
atsjenk@google.com
brianji@google.com
hwwang@google.com
# Overview eng team
alexchau@google.com
samcackett@google.com
silvajordan@google.com
uwaisashraf@google.com
vinayjoglekar@google.com
willosborn@google.com
# Physical Keyboard & Trackpad eng team
patmanning@google.com
@@ -45,11 +45,34 @@ helencheuk@google.com
shamalip@google.com
zakcohen@google.com
# System Navigation team
brianji@google.com
jonmiranda@google.com
jagrutdesai@google.com
randypfohl@google.com
saumyaprakash@google.com
twickham@google.com
victortulias@google.com
## Note: some of the below overlap and also work on other integrations like Circle to Search.
# All Apps / QSB team
awickham@google.com
brdayauon@google.com
ganjam@google.com
kylim@google.com
# Smartspace team
xilei@google.com
davidct@google.com
iamiam@google.com
jiuyu@google.com
per-file FeatureFlags.java, globs = set noparent
per-file FeatureFlags.java = sunnygoyal@google.com, winsonc@google.com, adamcohen@google.com, hyunyoungs@google.com, captaincole@google.com
per-file FeatureFlags.java = sunnygoyal@google.com, winsonc@google.com, adamcohen@google.com, hyunyoungs@google.com, captaincole@google.com, abegovic@google.com
per-file DeviceConfigWrapper.java, globs = set noparent
per-file DeviceConfigWrapper.java = sunnygoyal@google.com, winsonc@google.com, adamcohen@google.com, hyunyoungs@google.com
per-file DeviceConfigWrapper.java = sunnygoyal@google.com, winsonc@google.com, adamcohen@google.com, hyunyoungs@google.com, abegovic@google.com
# Predictive Back
per-file LauncherBackAnimationController.java = shanh@google.com, gallmann@google.com
per-file LauncherBackAnimationController.java = shanh@google.com, gallmann@google.com
+3 -2
View File
@@ -1,13 +1,14 @@
[Builtin Hooks]
ktfmt = true
bpfmt = true
[Builtin Hooks Options]
ktfmt = --kotlinlang-style
bpfmt = -d
[Tool Paths]
ktfmt = ${REPO_ROOT}/external/ktfmt/ktfmt.sh
[Hook Scripts]
checkstyle_hook = ${REPO_ROOT}/prebuilts/checkstyle/checkstyle.py --config_xml tools/checkstyle.xml --sha ${PREUPLOAD_COMMIT}
flag_hook = ${REPO_ROOT}/frameworks/base/packages/SystemUI/flag_check.py --msg=${PREUPLOAD_COMMIT_MESSAGE} --files=${PREUPLOAD_FILES} --project=${REPO_PATH}
alint_hook = ${REPO_ROOT}/vendor/google/tools/alint
+25 -29
View File
@@ -1,4 +1,4 @@
# Lawnchair 15
# Lawnchair 16
[![Build debug APK](https://github.com/LawnchairLauncher/lawnchair/actions/workflows/ci.yml/badge.svg)](https://github.com/LawnchairLauncher/lawnchair/actions/workflows/ci.yml)
[![Build release APK](https://github.com/LawnchairLauncher/lawnchair/actions/workflows/release_update.yml/badge.svg)](https://github.com/LawnchairLauncher/lawnchair/actions/workflows/release_update.yml)
@@ -9,25 +9,31 @@
[![GitHub Downloads](https://img.shields.io/github/downloads/LawnchairLauncher/lawnchair/total.svg?label=GitHub%20Downloads&logo=github)](https://github.com/LawnchairLauncher/lawnchair/releases)
[![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 and refactors that can cause Lawnchair to break.
>
> If you wish to contribute, read our [contributing guidelines](CONTRIBUTING.md). Note that this branch will undergo many changes as we slowly refactor our codebase, so the `16-dev` branch may be particularly unfriendly to new contributors. It is still possible to submit changes to `15-dev`, but new feature development will be focused on this branch.
>
> For regular users, we recommend staying on `15-dev` for stability purposes.
<picture>
<!-- Avoid image being clickable with slight workaround -->
<!-- ❤️ Credit to Raine for the original mockup on the Lawnchair Discord -->
<!-- ❤️ Credit to Lawrence Kayku for the current mockup on Unsplash
https://unsplash.com/photos/photography-of-green-leaves-ZVKr8wADhpc
<!-- ❤️ Credit to simonppt for the current mockup on Unsplash
https://unsplash.com/photos/a-white-flower-with-green-leaves-on-a-white-background-ojBNiaeykwc
-->
<source media="(prefers-color-scheme: dark)" srcset="docs/assets/device-frame.png" width="250px">
<img alt="Google Pixel running Lawnchair Launcher with green wallpaper" src="docs/assets/device-frame.png" width="250px">
<source media="(prefers-color-scheme: dark)" srcset="docs/assets/device-frame.webp" width="250px">
<img alt="A device running Lawnchair Launcher with green flower wallpaper" src="docs/assets/device-frame.webp" width="250px">
</picture>
Lawnchair is a free, open-source home app for Android. Taking Launcher3—Android’s default home app—as a starting point, it ports Pixel Launcher features and introduces rich customization options.
This branch houses the codebase of Lawnchair 15, which is currently in beta and is based on Launcher3 from Android 15. For Lawnchair 9 to 14, see the branches with the `9-` to `14-` prefixes, respectively.
This branch houses the codebase of Lawnchair 16, which is currently in development and is based on Launcher3 from Android 16. For Lawnchair 9 to 15, see the branches with the `9-` to `15-` prefixes, respectively.
## Features
- **Material You Theming:** Adapts to your wallpaper and system theme.
- **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 and newer. (requires root)
- **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!
@@ -38,26 +44,26 @@ This branch houses the codebase of Lawnchair 15, which is currently in beta and
<a href="https://play.google.com/store/apps/details?id=app.lawnchair.play">
<picture>
<!-- Avoid image being clickable with slight workaround -->
<source media="(prefers-color-scheme: dark)" srcset="docs/assets/badge-google-play.png" height="60">
<img alt="Get it on Google Play" src="docs/assets/badge-google-play.png" height="60">
<source media="(prefers-color-scheme: dark)" srcset="docs/assets/badge-google-play.webp" height="60">
<img alt="Get it on Google Play" src="docs/assets/badge-google-play.webp" height="60">
</picture>
</a>
<a href="https://apt.izzysoft.de/fdroid/index/apk/app.lawnchair">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="docs/assets/badge-izzyondroid.png" height="60">
<img alt="Get it on IzzyOnDroid" src="docs/assets/badge-izzyondroid.png" height="60">
<source media="(prefers-color-scheme: dark)" srcset="docs/assets/badge-izzyondroid.webp" height="60">
<img alt="Get it on IzzyOnDroid" src="docs/assets/badge-izzyondroid.webp" height="60">
</picture>
</a>
<a href="https://apps.obtainium.imranr.dev/redirect?r=obtainium://add/https://github.com/LawnchairLauncher/lawnchair/">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="docs/assets/badge-obtainium.png" height="60">
<img alt="Get it on Obtainium" src="docs/assets/badge-obtainium.png" height="60">
<source media="(prefers-color-scheme: dark)" srcset="docs/assets/badge-obtainium.webp" height="60">
<img alt="Get it on Obtainium" src="docs/assets/badge-obtainium.webp" height="60">
</picture>
</a>
<a href="https://github.com/LawnchairLauncher/lawnchair/releases">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="docs/assets/badge-github.png" height="60">
<img alt="Get it on GitHub" src="docs/assets/badge-github.png" height="60">
<source media="(prefers-color-scheme: dark)" srcset="docs/assets/badge-github.webp" height="60">
<img alt="Get it on GitHub" src="docs/assets/badge-github.webp" height="60">
</picture>
</a>
</p>
@@ -74,21 +80,11 @@ These builds offer the latest features and bug fixes at a cost of being slower a
### Verification
Verify the integrity of your Lawnchair download using these SHA-256 hashes:
###### 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
```
Please visit [Lawnchair Verification](VERIFICATION.md) on way to verify Lawnchair.
## Contributing
Please visit the [Lawnchair Contributing Guidelines](CONTRIBUTING.md) for information and tips on contributing to Lawnchair.
Please visit the [Lawnchair contributing guidelines](CONTRIBUTING.md) for information and tips on contributing to Lawnchair.
## Supporting Lawnchair
+2 -1
View File
@@ -9,8 +9,9 @@
The latest version of Lawnchair is the only supported version.
| Version | Supported |
| -------------- | ------------------ |
|----------------|--------------------|
| Nightly build | :white_check_mark: |
| 16 | :white_check_mark: |
| 15 | :white_check_mark: |
| 14 | :x: |
| 13 | :x: |
+21 -6
View File
@@ -1,10 +1,25 @@
*Lawnchair 15 Beta 1 is here!*
# Bubble Tea
We're excited to release the first beta for Lawnchair 15, a foundational update based on Android 15.
## Bubble Tea [QPR1]
The biggest new feature is one of our most requested ever: **App Drawer Folders**. You can now create and reorder custom folders to finally organize your app drawer.
### 🥞 Snapshot 7 (Development 4 Release 1)
This release is packed with many other improvements, from a more powerful dock to dozens of UI refinements.
Build: BS7.1711
**Read the full announcement on our blog:**
https://lawnchair.app/blog/lawnchair-15-beta-1
This snapshot marks the first time Bubble Tea QPR1 is able to pass KSP build stage without any
hiccups, the next 1 or 2 snapshots will be focusing on compilation stage, which should be the last
stage before we can get started on pE Development 4.
This is a developer-focused change log:
* Codebase updated to Android 16-0.0_r3 (Android 16.0.0 Release 3)
* Prebuilt updated to Android 16-0.0_r3 (Android 16.0.0 Release 3)
* Platform libs updated to Android 16-0.0_r3 (Android 16.0.0 Release 3)
* Move ViewCapture to platform lib
* Add Displaylib
* Flags updated to Android 16-0.0_r3 (Android 16.0.0 Release 3)
* Pull concurrent, dagger (the launcher3) as module
* TODO? We might need to migrate it to build source like compose instead
* Lots of prebuilt documentations update
* Add compose as part of launcher3 build source
* Removed test because I hate configuration gradle
* cc: @validcube fix me, cc: too bad
+414 -88
View File
@@ -22,13 +22,6 @@ flag {
bug: "316027081"
}
flag {
name: "enable_grid_only_overview"
namespace: "launcher"
description: "Enable a grid-only overview without a focused task."
bug: "257950105"
}
flag {
name: "enable_cursor_hover_states"
namespace: "launcher"
@@ -43,13 +36,6 @@ flag {
bug: "302189128"
}
flag {
name: "enable_overview_icon_menu"
namespace: "launcher"
description: "Enable updated overview icon and menu within task."
bug: "257950105"
}
flag {
name: "enable_focus_outline"
namespace: "launcher"
@@ -85,13 +71,6 @@ flag {
bug: "347281365"
}
flag {
name: "enable_unfolded_two_pane_picker"
namespace: "launcher"
description: "Enables two pane widget picker for unfolded foldables"
bug: "313922374"
}
flag {
name: "enable_tablet_two_pane_picker_v2"
namespace: "launcher"
@@ -113,13 +92,6 @@ flag {
bug: "238475505"
}
flag {
name: "enable_shortcut_dont_suggest_app"
namespace: "launcher"
description: "Enables don't suggest app shortcut for suggested apps"
bug: "319250810"
}
flag {
name: "enable_support_for_archiving"
namespace: "launcher"
@@ -194,24 +166,6 @@ flag {
}
}
flag {
name: "use_activity_overlay"
namespace: "launcher"
description: "Use an activity for home screen overlay"
bug: "273828110"
}
flag {
name: "enable_grid_migration_fix"
namespace: "launcher"
description: "Keep items in place when migrating to a bigger grid"
bug: "325286145"
is_fixed_read_only: true
metadata {
purpose: PURPOSE_BUGFIX
}
}
flag {
name: "enable_narrow_grid_restore"
namespace: "launcher"
@@ -237,54 +191,13 @@ flag {
bug: "323886237"
}
flag {
name: "enable_refactor_task_thumbnail"
namespace: "launcher"
description: "Enables rewritten version of TaskThumbnailViews in Overview"
bug: "331753115"
}
flag {
name: "enable_handle_delayed_gesture_callbacks"
namespace: "launcher"
description: "Enables additional handling for delayed mid-gesture callbacks"
bug: "285636175"
metadata {
purpose: PURPOSE_BUGFIX
}
}
flag {
name: "enable_fallback_overview_in_window"
namespace: "launcher"
namespace: "lse_desktop_experience"
description: "Enables fallback recents opening inside of a window instead of an activity."
bug: "292269949"
}
flag {
name: "enable_smartspace_as_a_widget"
namespace: "launcher"
description: "Enables smartspace as a widget"
bug: "300140279"
}
flag {
name: "enable_smartspace_removal_toggle"
namespace: "launcher"
description: "Enables smartspace removal toggle"
bug: "303471576"
}
flag {
name: "enable_additional_home_animations"
namespace: "launcher"
description: "Enables custom home animations for non-running tasks"
bug: "237638627"
metadata {
purpose: PURPOSE_BUGFIX
}
}
flag {
name: "enabled_folders_in_all_apps"
namespace: "launcher"
@@ -310,9 +223,422 @@ flag {
}
}
flag {
name: "enable_container_return_animations"
namespace: "launcher"
description: "Enables the container return animation mirroring launches."
bug: "341017746"
}
flag {
name: "floating_search_bar"
namespace: "launcher"
description: "Search bar persists at the bottom of the screen across Launcher states"
bug: "346408388"
}
flag {
name: "all_apps_sheet_for_handheld"
namespace: "launcher"
description: "All Apps will be presented on a bottom sheet in handheld mode"
bug: "374186088"
}
flag {
name: "all_apps_blur"
namespace: "launcher"
description: "Content behind the all apps panel in Launcher will be blurred."
bug: "400827727"
}
flag {
name: "enable_multi_instance_menu_taskbar"
namespace: "launcher"
description: "Menu in Taskbar with options to launch and manage multiple instances of the same app"
bug: "355237285"
}
flag {
name: "use_new_icon_for_archived_apps"
namespace: "launcher"
description: "Archived apps will use new cloud icon in app title instead of overlay"
bug: "350758155"
metadata {
purpose: PURPOSE_BUGFIX
}
}
flag {
name: "letter_fast_scroller"
namespace: "launcher"
description: "Change fast scroller to a lettered list"
bug: "358673724"
}
flag {
name: "ignore_three_finger_trackpad_for_nav_handle_long_press"
namespace: "launcher"
description: "Ignore three finger trackpad event for nav handle long press"
bug: "342143522"
metadata {
purpose: PURPOSE_BUGFIX
}
}
flag {
name: "work_scheduler_in_work_profile"
namespace: "launcher"
description: "Enables work scheduler view above the work pause button in work profile."
bug: "361589193"
}
flag {
name: "one_grid_specs"
namespace: "launcher"
description: "Defines the new specs for grids based on OneGrid"
bug: "364711064"
}
flag {
name: "one_grid_mounted_mode"
namespace: "launcher"
description: "Support a fixed landscape mode for handheld devices"
bug: "364711735"
}
flag {
name: "one_grid_rotation_handling"
namespace: "launcher"
description: "New landscape approach for the workspace using different rows and columns in landscape and portrait"
bug: "364711814"
}
flag {
name: "grid_migration_refactor"
namespace: "launcher"
description: "Refactor grid migration such that the code is simpler to understand and update"
bug: "358399271"
}
flag {
name: "accessibility_scroll_on_allapps"
namespace: "launcher"
description: "Scroll to item position if accessibility focused"
bug: "265392261"
metadata {
purpose: PURPOSE_BUGFIX
}
}
flag {
name: "enable_dismiss_prediction_undo"
namespace: "launcher"
description: "Show an 'Undo' snackbar when users dismiss a predicted hotseat item"
bug: "270394476"
}
flag {
name: "enable_all_apps_button_in_hotseat"
namespace: "launcher"
description: "Enables displaying the all apps button in the hotseat."
bug: "270393897"
}
flag {
name: "taskbar_quiet_mode_change_support"
namespace: "launcher"
description: "Support changing quiet mode for user profiles in taskbar."
bug: "345760034"
}
flag {
name: "enable_recents_window_proto_log"
namespace: "lse_desktop_experience"
description: "Enables tracking recents window logs in ProtoLog"
bug: "292269949"
}
flag {
name: "enable_state_manager_proto_log"
namespace: "lse_desktop_experience"
description: "Enables tracking state manager logs in ProtoLog"
bug: "292269949"
}
flag {
name: "enable_tiered_widgets_by_default_in_picker"
namespace: "launcher"
description: "Shows filtered set of widgets by default and an option to show all widgets in the widget picker"
bug: "356127021"
}
flag {
name: "show_taskbar_pinning_popup_from_anywhere"
namespace: "launcher"
description: "Shows the pinning popup view after long-pressing or right-clicking anywhere on the pinned taskbar"
bug: "297325541"
}
flag {
name: "enable_launcher_overview_in_window"
namespace: "lse_desktop_experience"
description: "Enables launcher recents opening inside of a window instead of being hosted in launcher activity."
bug: "292269949"
}
flag {
name: "use_system_radius_for_app_widgets"
namespace: "launcher"
description: "Use system radius for enforced widget corners instead of a separate 16.dp value"
bug: "373351337"
metadata {
purpose: PURPOSE_BUGFIX
}
}
flag {
name: "enable_contrast_tiles"
namespace: "launcher"
description: "Enable launcher app contrast tiles."
bug: "341217082"
}
flag {
name: "msdl_feedback"
namespace: "launcher"
description: "Enable MSDL feedback for Launcher interactions"
bug: "377496684"
}
flag {
name: "enable_launcher_icon_shapes"
namespace: "launcher"
description: "Enable launcher icon shape customizations"
bug: "348708061"
}
flag {
name: "predictive_back_to_home_polish"
namespace: "launcher"
description: "Enables workspace reveal animation for predictive back-to-home"
bug: "382453424"
metadata {
purpose: PURPOSE_BUGFIX
}
}
flag {
name: "predictive_back_to_home_blur"
namespace: "launcher"
description: "Adds blur for predictive back-to-home"
bug: "342178850"
metadata {
purpose: PURPOSE_BUGFIX
}
}
flag {
name: "enable_launcher_visual_refresh"
namespace: "launcher"
description: "Adds refresh for font family, app longpress menu icons, and pagination dots"
bug: "395145453"
}
flag {
name: "external_data_access"
namespace: "launcher"
description: "For LauncherProvider bug fixes and new static permissions as part of the cross oem backup / restore effort."
bug: "395145453"
is_fixed_read_only: true
metadata {
purpose: PURPOSE_BUGFIX
}
}
flag {
name: "gsf_res"
namespace: "launcher"
description: "Adds refresh for font family. Needs to be fixed to be used in resources."
bug: "395145453"
is_fixed_read_only: true
metadata {
purpose: PURPOSE_BUGFIX
}
}
flag {
name: "restore_archived_shortcuts"
namespace: "launcher"
description: "Makes sure pre-archived pinned shortcuts also get restored"
bug: "375414891"
metadata {
purpose: PURPOSE_BUGFIX
}
}
flag {
name: "restore_archived_app_icons_from_db"
namespace: "launcher"
description: "Restores pre-archived icons from db when available, mimicing promise icons"
bug: "391913214"
metadata {
purpose: PURPOSE_BUGFIX
}
}
flag {
name: "enable_mouse_interaction_changes"
namespace: "launcher"
description: "Changes mouse interaction behavior"
bug: "388897603"
}
flag {
name: "enable_alt_tab_kqs_on_connected_displays"
namespace: "lse_desktop_experience"
description: "Enable Alt + Tab KQS support on connected displays"
bug: "394007677"
}
flag {
name: "expressive_theme_in_taskbar_and_navigation"
namespace: "launcher"
description: "Enables the expressive theme and GSF font styles for Taskbar and Gesture Navigation"
bug: "394613212"
metadata {
purpose: PURPOSE_BUGFIX
}
}
flag {
name: "enable_strict_mode"
namespace: "launcher"
description: "Enable Strict Mode for the Launcher app"
bug: "394651876"
}
flag {
name: "enable_alt_tab_kqs_flatenning"
namespace: "lse_desktop_experience"
description: "Enable Alt + Tab KQS view to show apps in flattened structure"
bug: "382769617"
}
flag {
name: "enable_gesture_nav_on_connected_displays"
namespace: "lse_desktop_experience"
description: "Enables gesture navigation handling on connected displays"
bug: "382130680"
}
flag {
name: "enable_taskbar_behind_shade"
namespace: "lse_desktop_experience"
description: "Keeps taskbar behind notification shade when its pulled down"
bug: "343194358"
metadata {
purpose: PURPOSE_BUGFIX
}
}
flag {
name: "enable_scalability_for_desktop_experience"
namespace: "launcher"
description: "Enable more grid scale options on the launcher for desktop experience"
bug: "375491272"
}
flag {
name: "enable_gesture_nav_horizontal_touch_slop"
namespace: "launcher"
description: "Enables horizontal touch slop checking in non-vertical fling navigation gestures"
bug: "394364217"
metadata {
purpose: PURPOSE_BUGFIX
}
}
flag {
name: "sync_app_launch_with_taskbar_stash"
namespace: "launcher"
description: "Syncs the two animations (app launch, taskbar stash) so they play at the same time."
bug: "319162553"
metadata {
purpose: PURPOSE_BUGFIX
}
}
flag {
name: "remove_apps_refresh_on_right_click"
namespace: "launcher"
description: "Remove predicted apps refresh on right click"
bug: "343650193"
metadata {
purpose: PURPOSE_BUGFIX
}
}
flag {
name: "enable_taskbar_for_direct_boot"
namespace: "launcher"
description: "Initializes parts of Taskbar before onUserUnlocked"
bug: "324485921"
metadata {
purpose: PURPOSE_BUGFIX
}
}
flag {
name: "enable_taskbar_ui_thread"
namespace: "launcher"
description: "Enable per-window thread for taskbar"
bug: "404636836"
}
flag {
name: "enable_expressive_folder_expansion"
namespace: "launcher"
description: "Enables expressive folder expansion motion"
bug: "348708061"
metadata {
purpose: PURPOSE_BUGFIX
}
}
flag {
name: "model_repository"
namespace: "launcher"
description: "Adds various data repositories for the model"
bug: "390572144"
}
flag {
name: "home_screen_edit_improvements"
namespace: "launcher"
description: "Improves item removal and resizing within home screen"
bug: "416087474"
}
flag {
name: "enable_widget_picker_refactor"
namespace: "launcher"
description: "Enables the refactored code for widget picker using separate activity and module"
bug: "370950552"
}
flag {
name: "enable_reversible_home_action_corner"
namespace: "launcher"
description: "Enables home action corner to be reversible"
bug: "416664984"
}
flag {
name: "enable_long_press_remove_shortcut"
namespace: "launcher"
description: "Enables remove app shortcut on long press menu"
bug: "419289205"
metadata {
purpose: PURPOSE_BUGFIX
}
}
+30 -46
View File
@@ -19,16 +19,16 @@ flag {
name: "enable_refactor_task_thumbnail"
namespace: "launcher_overview"
description: "Enables rewritten version of TaskThumbnailViews in Overview"
bug: "331753115"
bug: "331754864"
}
flag {
name: "enable_hover_of_child_elements_in_taskview"
name: "enable_coroutine_threading_improvements"
namespace: "launcher_overview"
description: "Enables child elements to receive hover events in TaskView and respond visually to those hover events."
bug: "342594235"
description: "Enables changes to the threading model of Launcher's coroutines implementation"
bug: "416206104"
metadata {
purpose: PURPOSE_BUGFIX
purpose: PURPOSE_BUGFIX
}
}
@@ -39,23 +39,6 @@ flag {
bug: "357860832"
}
flag {
name: "enable_overview_command_helper_timeout"
namespace: "launcher_overview"
description: "Enables OverviewCommandHelper new version with a timeout to prevent the queue to be unresponsive."
bug: "351122926"
metadata {
purpose: PURPOSE_BUGFIX
}
}
flag {
name: "enable_desktop_windowing_carousel_detach"
namespace: "launcher_overview"
description: "Makes the desktop windowing task carousel detaches from fullscreen task carousel during quickswitch."
bug: "353947917"
}
flag {
name: "enable_desktop_exploded_view"
namespace: "launcher_overview"
@@ -63,16 +46,6 @@ flag {
bug: "378011776"
}
flag {
name: "enable_use_top_visible_activity_for_exclude_from_recent_task"
namespace: "launcher_overview"
description: "Enables using the top visible activity for exclude from recent task instead of the activity indicies."
bug: "342627272"
metadata {
purpose: PURPOSE_BUGFIX
}
}
flag {
name: "enable_expressive_dismiss_task_motion"
namespace: "launcher_overview"
@@ -80,16 +53,6 @@ flag {
bug: "381239462"
}
flag {
name: "enable_separate_external_display_tasks"
namespace: "launcher_overview"
description: "Enables separating external display tasks in Overview."
bug: "391311008"
metadata {
purpose: PURPOSE_BUGFIX
}
}
flag {
name: "enable_overview_on_connected_displays"
namespace: "launcher_overview"
@@ -101,7 +64,7 @@ flag {
name: "enable_overview_background_wallpaper_blur"
namespace: "launcher_overview"
description: "Enable wallpaper blur in overview."
bug: "369975912"
bug: "360297985"
}
flag {
@@ -112,11 +75,32 @@ flag {
}
flag {
name: "enable_show_enabled_shortcuts_in_accessibility_menu"
name: "enable_refactor_digital_wellbeing_toast"
namespace: "launcher_overview"
description: "Enables showing the same shortcuts in the Task menu as well as the accessibility actions menu"
bug: "383662632"
description: "Enables rewritten version of digital wellbeing toast in overview."
bug: "404838605"
}
flag {
name: "enable_refactor_task_content_view"
namespace: "launcher_overview"
description: "Enables refactor wrapping TaskThumbnailView in a TaskContentView."
bug: "408971730"
}
flag {
name: "enable_desktop_menu_on_secondary_display_bugfix"
namespace: "launcher_overview"
description: "Enable the 'Desktop' menu entry on full screen tiles on secondary display."
bug: "418822736"
metadata {
purpose: PURPOSE_BUGFIX
}
}
flag {
name: "enable_simultaneous_overview_trigger_on_extended_desktop"
namespace: "launcher_overview"
description: "Enable Overview to launch and exit simultaneously on default and external displays wherever it was triggered or quit from"
bug: "421128035"
}
+15 -7
View File
@@ -22,13 +22,6 @@ flag {
bug: "308054233"
}
flag {
name: "private_space_app_installer_button"
namespace: "launcher_search"
description: "This flag enables addition of App Installer button in Private Space container."
bug: "308064949"
}
flag {
name: "private_space_restrict_accessibility_drag"
namespace: "launcher_search"
@@ -43,6 +36,15 @@ flag {
bug: "289223923"
}
flag {
name: "nudge_pill"
namespace: "launcher_search"
description: "This flag enables change the nav or 3 button to nudge related edu (pill or icon) for CtS."
bug: "409121556"
metadata {
purpose: PURPOSE_BUGFIX
}
}
flag {
name: "private_space_add_floating_mask_view"
@@ -53,3 +55,9 @@ flag {
purpose: PURPOSE_BUGFIX
}
}
flag {
name: "enable_qsb_on_hotseat"
namespace: "launcher_search"
description: "Enable Search App's widget on hotseat"
bug: "405226308"
}
+1 -1
View File
@@ -12,5 +12,5 @@ android {
}
}
addFrameworkJar('framework-15.jar')
addFrameworkJar('framework-16.jar')
compileOnlyCommonJars()
+7 -1
View File
@@ -20,10 +20,16 @@ android {
lawn { dimension = "app" }
withQuickstep { dimension = "recents" }
github { dimension = "channel" }
nightly { dimension = "channel" }
play { dimension = "channel" }
}
testOptions.managedDevices.devices {
pixel7Api36(ManagedVirtualDevice) {
device = "Pixel 7"
apiLevel = 36
systemImageSource = "google"
}
pixel6Api33(ManagedVirtualDevice) {
device = "Pixel 6"
apiLevel = 33
@@ -35,7 +41,7 @@ android {
// This is the configuration block for the Baseline Profile plugin.
// You can specify to run the generators on a managed devices or connected devices.
baselineProfile {
managedDevices += "pixel6Api33"
managedDevices += ["pixel6Api33", "pixel7Api36"]
useConnectedDevices = false
}
@@ -1,5 +1,7 @@
package app.lawnchair.baseline
import android.os.Build
import androidx.annotation.RequiresApi
import androidx.benchmark.macro.junit4.BaselineProfileRule
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
@@ -33,9 +35,11 @@ import org.junit.runner.RunWith
class BaselineProfileGenerator {
@get:Rule
@RequiresApi(Build.VERSION_CODES.P)
val rule = BaselineProfileRule()
@Test
@RequiresApi(Build.VERSION_CODES.P)
fun generate() {
rule.collect(Constants.PACKAGE_NAME) {
// This block defines the app's critical user journey. Here we are interested in
+66 -20
View File
@@ -20,6 +20,14 @@ plugins {
alias(libs.plugins.diffplug.spotless)
}
// LC-Build-TODO: addFrameworkJar() doesn't work, what???
def localFrameworkJar = new File("$rootDir/prebuilts/libs", "framework-16.jar")
tasks.withType(JavaCompile).configureEach {
classpath = files(localFrameworkJar)
}
tasks.withType(KotlinCompile).configureEach {
libraries.from(files(localFrameworkJar))
}
allprojects {
plugins.withType(AndroidBasePlugin).configureEach {
@@ -32,7 +40,7 @@ allprojects {
}
defaultConfig {
minSdk 26
targetSdk 35
targetSdk 36
vectorDrawables.useSupportLibrary = true
}
lint {
@@ -46,6 +54,7 @@ allprojects {
}
dependencies {
implementation libs.androidx.core.ktx
implementation libs.androidx.core.animation
}
}
@@ -53,7 +62,7 @@ allprojects {
protobuf {
// Configure the protoc executable
protoc {
artifact = libs.protobuf.protoc.get().toString()
artifact = "com.google.protobuf:protoc:${libs.versions.protocVersion.get()}"
}
generateProtoTasks {
all().configureEach { task ->
@@ -119,9 +128,9 @@ allprojects {
compileOnlyCommonJars = {
dependencies {
compileOnly fileTree(dir: FRAMEWORK_PREBUILTS_DIR, include: 'SystemUI-core.jar')
compileOnly fileTree(dir: FRAMEWORK_PREBUILTS_DIR, include: 'SystemUI-statsd.jar')
compileOnly fileTree(dir: FRAMEWORK_PREBUILTS_DIR, include: 'WindowManager-Shell-15.jar')
compileOnly fileTree(dir: FRAMEWORK_PREBUILTS_DIR, include: 'SystemUI-core-16.jar')
compileOnly fileTree(dir: FRAMEWORK_PREBUILTS_DIR, include: 'SystemUI-statsd-16.jar')
compileOnly fileTree(dir: FRAMEWORK_PREBUILTS_DIR, include: 'WindowManager-Shell-16.jar')
compileOnly projects.compatLib
compileOnly projects.compatLib.compatLibVQ
@@ -130,6 +139,7 @@ allprojects {
compileOnly projects.compatLib.compatLibVT
compileOnly projects.compatLib.compatLibVU
compileOnly projects.compatLib.compatLibVV
compileOnly projects.compatLib.compatLibVBaklava
}
}
}
@@ -144,20 +154,22 @@ final def ciRef = System.getenv("GITHUB_REF") ?: ""
final def ciRunNumber = System.getenv("GITHUB_RUN_NUMBER") ?: ""
final def isReleaseBuild = ciBuild && ciRef.contains("beta")
final def devReleaseName = ciBuild ? "Dev.(#${ciRunNumber})" : "Dev.(${buildCommit})"
final def version = "15"
final def releaseName = "Beta 1"
final def version = "16"
final def releaseName = "Development 4 Release 1"
final def versionDisplayName = "${version}.${isReleaseBuild ? releaseName : devReleaseName}"
final def majorVersion = versionDisplayName.split("\\.")[0]
final def quickstepMinSdk = "29"
final def quickstepMaxSdk = "35"
final def quickstepMaxSdk = "36"
android {
namespace "com.android.launcher3"
defaultConfig {
// Lawnchair Launcher 15.0 Beta 1
// See CONTRIBUTING.md#versioning-scheme
versionCode 15_00_02_01
/*
* Lawnchair Launcher 16.0 Development 4 Release 1
* see CONTRIBUTING.md#versioning-scheme
*/
versionCode 16_00_01_04_01
versionName "${versionDisplayName}"
buildConfigField "String", "VERSION_DISPLAY_NAME", "\"${versionDisplayName}\""
buildConfigField "String", "MAJOR_VERSION", "\"${majorVersion}\""
@@ -245,12 +257,18 @@ android {
debug {
applicationIdSuffix ".debug"
resValue("string", "derived_app_name", "Lawnchair (Debug)")
manifestPlaceholders.quickstepMinSdk = "0"
manifestPlaceholders.quickstepMaxSdk = "100000"
buildConfigField "int", "QUICKSTEP_MIN_SDK", "0"
buildConfigField "int", "QUICKSTEP_MAX_SDK", "100000"
}
release {
resValue("string", "derived_app_name", "Lawnchair")
minifyEnabled true
shrinkResources true
pseudoLocalesEnabled false
proguardFiles proguardFilesFromAosp + "proguard.pro"
}
}
@@ -301,7 +319,7 @@ android {
sourceSets {
main {
res.srcDirs = ['res']
java.srcDirs = ['src', 'src_plugins']
java.srcDirs = ['src', 'src_plugins', 'compose/facade/core', 'compose/facade/enabled', 'compose/features'] // Lawnchair-TODO: Don't include Compose Disabled, but there's has to be another way of making this NOT long
manifest.srcFile 'AndroidManifest-common.xml'
proto {
srcDirs = ['protos/', 'quickstep/protos_overrides/']
@@ -343,7 +361,7 @@ android {
withQuickstep {
res.srcDirs = ['quickstep/res', 'quickstep/recents_ui_overrides/res']
java.srcDirs = ['quickstep/src', 'quickstep/recents_ui_overrides/src']
java.srcDirs = ['quickstep/src', 'quickstep/dagger', 'quickstep/recents_ui_overrides/src', 'quickstep/src_protolog']
manifest.srcFile "quickstep/AndroidManifest.xml"
}
}
@@ -356,23 +374,28 @@ composeCompiler {
reportsDestination = layout.buildDirectory.dir("compose_build_reports")
}
addFrameworkJar('framework-15.jar')
addFrameworkJar('framework-16.jar')
dependencies {
implementation projects.iconloaderlib
implementation projects.searchuilib
implementation projects.animationlib
implementation projects.msdllib
implementation projects.contextualeducationlib
implementation projects.viewcapturelib
implementation projects.displaylib
implementation projects.mechanics
// Recents lib dependency
withQuickstepCompileOnly projects.hiddenApi
withQuickstepImplementation projects.shared
withQuickstepImplementation projects.anim
withQuickstepImplementation projects.animation
withQuickstepImplementation projects.unfold
withQuickstepImplementation projects.viewcapture
withQuickstepImplementation projects.log
withQuickstepCompileOnly projects.plugin
withQuickstepImplementation projects.plugincore
withQuickstepCompileOnly projects.common
withQuickstepCompileOnly projects.utils
// QuickSwitch Compat
withQuickstepImplementation projects.compatLib
@@ -382,13 +405,19 @@ dependencies {
withQuickstepImplementation projects.compatLib.compatLibVT
withQuickstepImplementation projects.compatLib.compatLibVU
withQuickstepImplementation projects.compatLib.compatLibVV
withQuickstepImplementation projects.compatLib.compatLibVBaklava
withQuickstepImplementation projects.wmshell
withQuickstepImplementation projects.flags
withQuickstepImplementation projects.dagger
withQuickstepImplementation projects.concurrent
// withQuickstepImplementation projects.compose
withQuickstepImplementation projects.modules.widgetpicker
implementation libs.androidx.dynamicanimation
implementation fileTree(dir: FRAMEWORK_PREBUILTS_DIR, include: 'SystemUI-statsd-15.jar')
implementation fileTree(dir: FRAMEWORK_PREBUILTS_DIR, include: 'WindowManager-Shell-15.jar')
withQuickstepCompileOnly fileTree(dir: FRAMEWORK_PREBUILTS_DIR, include: 'framework-15.jar')
implementation fileTree(dir: FRAMEWORK_PREBUILTS_DIR, include: 'SystemUI-statsd-16.jar')
implementation fileTree(dir: FRAMEWORK_PREBUILTS_DIR, include: 'WindowManager-Shell-16.jar')
withQuickstepCompileOnly fileTree(dir: FRAMEWORK_PREBUILTS_DIR, include: 'framework-16.jar')
baselineProfile projects.baselineProfile
coreLibraryDesugaring libs.android.desugarJdkLibs
@@ -398,19 +427,27 @@ dependencies {
implementation libs.androidx.recyclerview
implementation libs.androidx.preference.ktx
implementation libs.javax.inject
implementation libs.kotlinx.coroutines.android
implementation libs.kotlinx.serialization.json
implementation libs.chickenhook.restrictionbypass
implementation libs.rikka.refine.runtime
implementation libs.androidx.activity.compose
implementation libs.androidx.constraintlayout
implementation libs.androidx.datastore.preferences
implementation platform(libs.compose.bom)
implementation libs.compose.ui
implementation libs.compose.ui.util
implementation libs.compose.ui.graphics
implementation libs.bundles.graphics
debugImplementation libs.compose.ui.tooling
implementation libs.compose.ui.tooling.preview
implementation libs.compose.ui.google.fonts
implementation libs.compose.foundation
implementation libs.compose.material.icons
implementation libs.compose.material
implementation libs.compose.runtime.livedata
implementation libs.compose.material3
implementation libs.compose.material3.windowSizeClass
@@ -453,10 +490,19 @@ dependencies {
implementation libs.hoko.blur
implementation libs.androidx.window
ksp libs.dagger.compiler
implementation libs.dagger.hilt.android
ksp libs.dagger.hilt.compiler
implementation libs.google.guava
debugImplementation libs.leakcanary.android
}
ksp {
arg("room.schemaLocation", "$projectDir/schemas")
arg("dagger.hilt.disableModulesHaveInstallInCheck", "true")
}
@@ -469,7 +515,7 @@ spotless {
kotlin {
target("lawnchair/src/**/*.kt")
ktlint("1.8.0").customRuleSets([
libs.composeRules.get().toString()
"io.nlopez.compose.rules:ktlint:0.4.28",
]).editorConfigOverride([
"ktlint_compose_compositionlocal-allowlist": "disabled",
"ktlint_compose_lambda-param-event-trailing": "disabled",
+18 -9
View File
@@ -1,15 +1,24 @@
# Lawnchair Quickstep Compat Library
The `compatLib` library helps integrate Lawnchair with QuickSwitch while ensuring backward-compatibility with older Android versions.
The `compatLib` library helps integrate Lawnchair with Recents
(also known as QuickSwitch, Quickstep, or sometimes, Lawnstep)
while ensuring backward-compatibility with older Android versions.
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.
| Library | Android version |
|-------------|-----------------|
| compatLibVQ | 10 |
| compatLibVR | 11 |
| compatLibVS | 12 |
| compatLibVT | 13 |
| compatLibVU | 14 |
| compatLibVV | 15 |
Starting with Android 16 and above, the `compatLib` will denoted by the codename of the Android version
(e.g., `compatLibVBaklava` for Android 16).
| Library | Android version |
|-------------------|-----------------|
| compatLibVQ | 10 |
| compatLibVR | 11 |
| compatLibVS | 12 |
| compatLibVT | 13 |
| compatLibVU | 14 |
| 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.
+1
View File
@@ -3,6 +3,7 @@ plugins {
}
android {
buildToolsVersion "36.1.0"
namespace "app.lawnchair.compatlib"
buildFeatures {
+10 -12
View File
@@ -1,21 +1,19 @@
# Lawnchair Visual Guidelines
# Lawnchair Assets Guidelines
This directory lists all the decoration & visual explainers used in the Lawnchair Documentation.
All assets created should use Material 3 design with `#47B84F` as source color and
All assets created should use Material 3 design with `#47B84F` as source color, and
the [Inter](https://fonts.google.com/specimen/Inter) ([OFL v1.1](https://github.com/rsms/inter/?tab=OFL-1.1-1-ov-file#readme))
typography. Visit the [Material 3 theme builder][material-theme-builder] for more information.
typography.
When creating device mockups for Lawnchair, make sure that you're using the latest commits of
Lawnchair or use Lawnchair Nightly as base.
Visit the [Material 3 theme builder][material-theme-builder] for more information on color.
## Device Mockup
## Device mockup
Use in: [README](/README.md)
* Icon pack: [Lawnicons](https://github.com/LawnchairLauncher/lawnicons)
* Wallpaper: https://unsplash.com/photos/photography-of-green-leaves-ZVKr8wADhpc
* Color Extraction Technique: Tonal Spot from Lawnchair
* License: https://unsplash.com/license
When creating device mockups for Lawnchair, make sure the latest stable commits of Lawnchair is use
as base. All wallpapers, fonts and icon packs are allowed as long as they're free-to-use
under a permissive license like the licenses from Creative-Common. Using vanilla out-of-the-box
experience is recommended because they show the user what to expect from Lawnchair Launcher when
they first use it.
[material-theme-builder]: https://material-foundation.github.io/material-theme-builder/?primary=%2347B84F&bodyFont=Inter&displayFont=Inter&colorMatch=false
Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 39 KiB

@@ -1 +1 @@
Homescreen based on on Launcher3 from AOSP
Homescreen based on Launcher3 from AOSP
+22 -4
View File
@@ -1,9 +1,27 @@
# Launcher3 Flags
# Flags
Run
Turn SRCJAR into JAR and paste the launcher3 contents into the current Launcher3 flags.
m Launcher3
Remove all aconfig flags
## Launcher3 Flags
out\soong\.intermediates\packages\apps\Launcher3\aconfig\com_android_launcher3_flags_lib\android_common\gen\com_android_launcher3_flags_lib.srcjar
Turn it into JAR and paste the contents into the current Launcher3 flags.
## SystemUI
out\soong\.intermediates\frameworks\base\packages\SystemUI\aconfig\com_android_systemui_flags_lib\android_common\gen\com_android_systemui_flags_lib.srcjar
### SystemUI Shared
out\soong\.intermediates\frameworks\libs\systemui\aconfig\com_android_systemui_shared_flags_lib\android_common\gen\com_android_systemui_shared_flags_lib.srcjar
## Windows.flags2
out\soong\.intermediates\frameworks\base\com.android.window.flags.window-aconfig-java\android_common\gen\com.android.window.flags.window-aconfig-java.srcjar
Change from windows.flag to windows.flags2
## WM Shell
out\soong\.intermediates\frameworks\base\libs\WindowManager\Shell\aconfig\com_android_wm_shell_flags_lib\android_common\gen\com_android_wm_shell_flags_lib.srcjar
+1 -1
View File
@@ -12,5 +12,5 @@ android {
}
}
addFrameworkJar('framework-15.jar')
addFrameworkJar('framework-16.jar')
compileOnlyCommonJars()
File diff suppressed because it is too large. Load diff
@@ -3,7 +3,6 @@ package com.android.launcher3;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Predicate;
/** @hide */
public class FakeFeatureFlagsImpl extends CustomFeatureFlags {
private final Map<String, Boolean> mFlagMap = new HashMap<>();
+333 -10
View File
@@ -1,103 +1,426 @@
package com.android.launcher3;
/** @hide */
public interface FeatureFlags {
boolean accessibilityScrollOnAllapps();
boolean allAppsBlur();
boolean allAppsSheetForHandheld();
boolean enableAddAppWidgetViaConfigActivityV2();
boolean enableAdditionalHomeAnimations();
boolean enableAllAppsButtonInHotseat();
boolean enableAltTabKqsFlatenning();
boolean enableAltTabKqsOnConnectedDisplays();
boolean enableCategorizedWidgetSuggestions();
boolean enableContainerReturnAnimations();
boolean enableContrastTiles();
boolean enableCoroutineThreadingImprovements();
boolean enableCursorHoverStates();
boolean enableDesktopExplodedView();
boolean enableDesktopMenuOnSecondaryDisplayBugfix();
boolean enableDismissPredictionUndo();
boolean enableExpandingPauseWorkButton();
boolean enableExpressiveDismissTaskMotion();
boolean enableExpressiveFolderExpansion();
boolean enableFallbackOverviewInWindow();
boolean enableFirstScreenBroadcastArchivingExtras();
boolean enableFocusOutline();
boolean enableGeneratedPreviews();
boolean enableGridMigrationFix();
boolean enableGestureNavHorizontalTouchSlop();
boolean enableGestureNavOnConnectedDisplays();
boolean enableGridOnlyOverview();
boolean enableHandleDelayedGestureCallbacks();
boolean enableGrowthNudge();
boolean enableHomeTransitionListener();
boolean enableLargeDesktopWindowingTile();
boolean enableLauncherBrMetricsFixed();
boolean enableLauncherIconShapes();
boolean enableLauncherOverviewInWindow();
boolean enableLauncherVisualRefresh();
boolean enableLongPressRemoveShortcut();
boolean enableMouseInteractionChanges();
boolean enableMultiInstanceMenuTaskbar();
boolean enableNarrowGridRestore();
boolean enableOverviewBackgroundWallpaperBlur();
boolean enableOverviewDesktopTileWallpaperBackground();
boolean enableOverviewIconMenu();
boolean enableOverviewOnConnectedDisplays();
boolean enablePredictiveBackGesture();
boolean enablePrivateSpace();
boolean enablePrivateSpaceInstallShortcut();
boolean enableQsbOnHotseat();
boolean enableRebootUnlockAnimation();
boolean enableRecentsInTaskbar();
boolean enableRecentsWindowProtoLog();
boolean enableRefactorDigitalWellbeingToast();
boolean enableRefactorTaskContentView();
boolean enableRefactorTaskThumbnail();
boolean enableResponsiveWorkspace();
boolean enableReversibleHomeActionCorner();
boolean enableScalabilityForDesktopExperience();
boolean enableScalingRevealHomeAnimation();
boolean enableShortcutDontSuggestApp();
boolean enableSmartspaceAsAWidget();
boolean enableSmartspaceRemovalToggle();
boolean enableSimultaneousOverviewTriggerOnExtendedDesktop();
boolean enableStateManagerProtoLog();
boolean enableStrictMode();
boolean enableSupportForArchiving();
boolean enableTabletTwoPanePickerV2();
boolean enableTaskbarBehindShade();
boolean enableTaskbarCustomization();
boolean enableTaskbarForDirectBoot();
boolean enableTaskbarNoRecreate();
boolean enableTaskbarPinning();
boolean enableTaskbarUiThread();
boolean enableTieredWidgetsByDefaultInPicker();
boolean enableTwoPaneLauncherSettings();
boolean enableTwolineAllapps();
boolean enableTwolineToggle();
boolean enableUnfoldStateAnimation();
boolean enableUnfoldedTwoPanePicker();
boolean enableWidgetPickerRefactor();
boolean enableWidgetTapToAdd();
boolean enableWorkspaceInflation();
boolean enabledFoldersInAllApps();
boolean expressiveThemeInTaskbarAndNavigation();
boolean externalDataAccess();
boolean floatingSearchBar();
boolean forceMonochromeAppIcons();
boolean gridMigrationRefactor();
boolean gsfRes();
boolean homeScreenEditImprovements();
boolean ignoreThreeFingerTrackpadForNavHandleLongPress();
boolean letterFastScroller();
boolean modelRepository();
boolean msdlFeedback();
boolean nudgePill();
boolean oneGridMountedMode();
boolean oneGridRotationHandling();
boolean oneGridSpecs();
boolean predictiveBackToHomeBlur();
boolean predictiveBackToHomePolish();
boolean privateSpaceAddFloatingMaskView();
boolean privateSpaceAnimation();
boolean privateSpaceAppInstallerButton();
boolean privateSpaceRestrictAccessibilityDrag();
boolean privateSpaceRestrictItemDrag();
boolean privateSpaceSysAppsSeparation();
boolean useActivityOverlay();
}
boolean removeAppsRefreshOnRightClick();
boolean restoreArchivedAppIconsFromDb();
boolean restoreArchivedShortcuts();
boolean showTaskbarPinningPopupFromAnywhere();
boolean syncAppLaunchWithTaskbarStash();
boolean taskbarQuietModeChangeSupport();
boolean useNewIconForArchivedApps();
boolean useSystemRadiusForAppWidgets();
boolean workSchedulerInWorkProfile();
}
File diff suppressed because it is too large. Load diff
+578 -31
View File
@@ -1,18 +1,45 @@
package com.android.launcher3;
// TODO(b/303773055): Remove the annotation after access issue is resolved.
/** @hide */
public final class Flags {
/** @hide */
public static final String FLAG_ACCESSIBILITY_SCROLL_ON_ALLAPPS = "com.android.launcher3.accessibility_scroll_on_allapps";
/** @hide */
public static final String FLAG_ALL_APPS_BLUR = "com.android.launcher3.all_apps_blur";
/** @hide */
public static final String FLAG_ALL_APPS_SHEET_FOR_HANDHELD = "com.android.launcher3.all_apps_sheet_for_handheld";
/** @hide */
public static final String FLAG_ENABLE_ADD_APP_WIDGET_VIA_CONFIG_ACTIVITY_V2 = "com.android.launcher3.enable_add_app_widget_via_config_activity_v2";
/** @hide */
public static final String FLAG_ENABLE_ADDITIONAL_HOME_ANIMATIONS = "com.android.launcher3.enable_additional_home_animations";
public static final String FLAG_ENABLE_ALL_APPS_BUTTON_IN_HOTSEAT = "com.android.launcher3.enable_all_apps_button_in_hotseat";
/** @hide */
public static final String FLAG_ENABLE_ALT_TAB_KQS_FLATENNING = "com.android.launcher3.enable_alt_tab_kqs_flatenning";
/** @hide */
public static final String FLAG_ENABLE_ALT_TAB_KQS_ON_CONNECTED_DISPLAYS = "com.android.launcher3.enable_alt_tab_kqs_on_connected_displays";
/** @hide */
public static final String FLAG_ENABLE_CATEGORIZED_WIDGET_SUGGESTIONS = "com.android.launcher3.enable_categorized_widget_suggestions";
/** @hide */
public static final String FLAG_ENABLE_CONTAINER_RETURN_ANIMATIONS = "com.android.launcher3.enable_container_return_animations";
/** @hide */
public static final String FLAG_ENABLE_CONTRAST_TILES = "com.android.launcher3.enable_contrast_tiles";
/** @hide */
public static final String FLAG_ENABLE_COROUTINE_THREADING_IMPROVEMENTS = "com.android.launcher3.enable_coroutine_threading_improvements";
/** @hide */
public static final String FLAG_ENABLE_CURSOR_HOVER_STATES = "com.android.launcher3.enable_cursor_hover_states";
/** @hide */
public static final String FLAG_ENABLE_DESKTOP_EXPLODED_VIEW = "com.android.launcher3.enable_desktop_exploded_view";
/** @hide */
public static final String FLAG_ENABLE_DESKTOP_MENU_ON_SECONDARY_DISPLAY_BUGFIX = "com.android.launcher3.enable_desktop_menu_on_secondary_display_bugfix";
/** @hide */
public static final String FLAG_ENABLE_DISMISS_PREDICTION_UNDO = "com.android.launcher3.enable_dismiss_prediction_undo";
/** @hide */
public static final String FLAG_ENABLE_EXPANDING_PAUSE_WORK_BUTTON = "com.android.launcher3.enable_expanding_pause_work_button";
/** @hide */
public static final String FLAG_ENABLE_EXPRESSIVE_DISMISS_TASK_MOTION = "com.android.launcher3.enable_expressive_dismiss_task_motion";
/** @hide */
public static final String FLAG_ENABLE_EXPRESSIVE_FOLDER_EXPANSION = "com.android.launcher3.enable_expressive_folder_expansion";
/** @hide */
public static final String FLAG_ENABLE_FALLBACK_OVERVIEW_IN_WINDOW = "com.android.launcher3.enable_fallback_overview_in_window";
/** @hide */
public static final String FLAG_ENABLE_FIRST_SCREEN_BROADCAST_ARCHIVING_EXTRAS = "com.android.launcher3.enable_first_screen_broadcast_archiving_extras";
@@ -21,52 +48,94 @@ public final class Flags {
/** @hide */
public static final String FLAG_ENABLE_GENERATED_PREVIEWS = "com.android.launcher3.enable_generated_previews";
/** @hide */
public static final String FLAG_ENABLE_GRID_MIGRATION_FIX = "com.android.launcher3.enable_grid_migration_fix";
public static final String FLAG_ENABLE_GESTURE_NAV_HORIZONTAL_TOUCH_SLOP = "com.android.launcher3.enable_gesture_nav_horizontal_touch_slop";
/** @hide */
public static final String FLAG_ENABLE_GESTURE_NAV_ON_CONNECTED_DISPLAYS = "com.android.launcher3.enable_gesture_nav_on_connected_displays";
/** @hide */
public static final String FLAG_ENABLE_GRID_ONLY_OVERVIEW = "com.android.launcher3.enable_grid_only_overview";
/** @hide */
public static final String FLAG_ENABLE_HANDLE_DELAYED_GESTURE_CALLBACKS = "com.android.launcher3.enable_handle_delayed_gesture_callbacks";
public static final String FLAG_ENABLE_GROWTH_NUDGE = "com.android.launcher3.enable_growth_nudge";
/** @hide */
public static final String FLAG_ENABLE_HOME_TRANSITION_LISTENER = "com.android.launcher3.enable_home_transition_listener";
/** @hide */
public static final String FLAG_ENABLE_LARGE_DESKTOP_WINDOWING_TILE = "com.android.launcher3.enable_large_desktop_windowing_tile";
/** @hide */
public static final String FLAG_ENABLE_LAUNCHER_BR_METRICS_FIXED = "com.android.launcher3.enable_launcher_br_metrics_fixed";
/** @hide */
public static final String FLAG_ENABLE_LAUNCHER_ICON_SHAPES = "com.android.launcher3.enable_launcher_icon_shapes";
/** @hide */
public static final String FLAG_ENABLE_LAUNCHER_OVERVIEW_IN_WINDOW = "com.android.launcher3.enable_launcher_overview_in_window";
/** @hide */
public static final String FLAG_ENABLE_LAUNCHER_VISUAL_REFRESH = "com.android.launcher3.enable_launcher_visual_refresh";
/** @hide */
public static final String FLAG_ENABLE_LONG_PRESS_REMOVE_SHORTCUT = "com.android.launcher3.enable_long_press_remove_shortcut";
/** @hide */
public static final String FLAG_ENABLE_MOUSE_INTERACTION_CHANGES = "com.android.launcher3.enable_mouse_interaction_changes";
/** @hide */
public static final String FLAG_ENABLE_MULTI_INSTANCE_MENU_TASKBAR = "com.android.launcher3.enable_multi_instance_menu_taskbar";
/** @hide */
public static final String FLAG_ENABLE_NARROW_GRID_RESTORE = "com.android.launcher3.enable_narrow_grid_restore";
/** @hide */
public static final String FLAG_ENABLE_OVERVIEW_BACKGROUND_WALLPAPER_BLUR = "com.android.launcher3.enable_overview_background_wallpaper_blur";
/** @hide */
public static final String FLAG_ENABLE_OVERVIEW_DESKTOP_TILE_WALLPAPER_BACKGROUND = "com.android.launcher3.enable_overview_desktop_tile_wallpaper_background";
/** @hide */
public static final String FLAG_ENABLE_OVERVIEW_ICON_MENU = "com.android.launcher3.enable_overview_icon_menu";
/** @hide */
public static final String FLAG_ENABLE_OVERVIEW_ON_CONNECTED_DISPLAYS = "com.android.launcher3.enable_overview_on_connected_displays";
/** @hide */
public static final String FLAG_ENABLE_PREDICTIVE_BACK_GESTURE = "com.android.launcher3.enable_predictive_back_gesture";
/** @hide */
public static final String FLAG_ENABLE_PRIVATE_SPACE = "com.android.launcher3.enable_private_space";
/** @hide */
public static final String FLAG_ENABLE_PRIVATE_SPACE_INSTALL_SHORTCUT = "com.android.launcher3.enable_private_space_install_shortcut";
/** @hide */
public static final String FLAG_ENABLE_QSB_ON_HOTSEAT = "com.android.launcher3.enable_qsb_on_hotseat";
/** @hide */
public static final String FLAG_ENABLE_REBOOT_UNLOCK_ANIMATION = "com.android.launcher3.enable_reboot_unlock_animation";
/** @hide */
public static final String FLAG_ENABLE_RECENTS_IN_TASKBAR = "com.android.launcher3.enable_recents_in_taskbar";
/** @hide */
public static final String FLAG_ENABLE_RECENTS_WINDOW_PROTO_LOG = "com.android.launcher3.enable_recents_window_proto_log";
/** @hide */
public static final String FLAG_ENABLE_REFACTOR_DIGITAL_WELLBEING_TOAST = "com.android.launcher3.enable_refactor_digital_wellbeing_toast";
/** @hide */
public static final String FLAG_ENABLE_REFACTOR_TASK_CONTENT_VIEW = "com.android.launcher3.enable_refactor_task_content_view";
/** @hide */
public static final String FLAG_ENABLE_REFACTOR_TASK_THUMBNAIL = "com.android.launcher3.enable_refactor_task_thumbnail";
/** @hide */
public static final String FLAG_ENABLE_RESPONSIVE_WORKSPACE = "com.android.launcher3.enable_responsive_workspace";
/** @hide */
public static final String FLAG_ENABLE_REVERSIBLE_HOME_ACTION_CORNER = "com.android.launcher3.enable_reversible_home_action_corner";
/** @hide */
public static final String FLAG_ENABLE_SCALABILITY_FOR_DESKTOP_EXPERIENCE = "com.android.launcher3.enable_scalability_for_desktop_experience";
/** @hide */
public static final String FLAG_ENABLE_SCALING_REVEAL_HOME_ANIMATION = "com.android.launcher3.enable_scaling_reveal_home_animation";
/** @hide */
public static final String FLAG_ENABLE_SHORTCUT_DONT_SUGGEST_APP = "com.android.launcher3.enable_shortcut_dont_suggest_app";
public static final String FLAG_ENABLE_SIMULTANEOUS_OVERVIEW_TRIGGER_ON_EXTENDED_DESKTOP = "com.android.launcher3.enable_simultaneous_overview_trigger_on_extended_desktop";
/** @hide */
public static final String FLAG_ENABLE_SMARTSPACE_AS_A_WIDGET = "com.android.launcher3.enable_smartspace_as_a_widget";
public static final String FLAG_ENABLE_STATE_MANAGER_PROTO_LOG = "com.android.launcher3.enable_state_manager_proto_log";
/** @hide */
public static final String FLAG_ENABLE_SMARTSPACE_REMOVAL_TOGGLE = "com.android.launcher3.enable_smartspace_removal_toggle";
public static final String FLAG_ENABLE_STRICT_MODE = "com.android.launcher3.enable_strict_mode";
/** @hide */
public static final String FLAG_ENABLE_SUPPORT_FOR_ARCHIVING = "com.android.launcher3.enable_support_for_archiving";
/** @hide */
public static final String FLAG_ENABLE_TABLET_TWO_PANE_PICKER_V2 = "com.android.launcher3.enable_tablet_two_pane_picker_v2";
/** @hide */
public static final String FLAG_ENABLE_TASKBAR_BEHIND_SHADE = "com.android.launcher3.enable_taskbar_behind_shade";
/** @hide */
public static final String FLAG_ENABLE_TASKBAR_CUSTOMIZATION = "com.android.launcher3.enable_taskbar_customization";
/** @hide */
public static final String FLAG_ENABLE_TASKBAR_FOR_DIRECT_BOOT = "com.android.launcher3.enable_taskbar_for_direct_boot";
/** @hide */
public static final String FLAG_ENABLE_TASKBAR_NO_RECREATE = "com.android.launcher3.enable_taskbar_no_recreate";
/** @hide */
public static final String FLAG_ENABLE_TASKBAR_PINNING = "com.android.launcher3.enable_taskbar_pinning";
/** @hide */
public static final String FLAG_ENABLE_TASKBAR_UI_THREAD = "com.android.launcher3.enable_taskbar_ui_thread";
/** @hide */
public static final String FLAG_ENABLE_TIERED_WIDGETS_BY_DEFAULT_IN_PICKER = "com.android.launcher3.enable_tiered_widgets_by_default_in_picker";
/** @hide */
public static final String FLAG_ENABLE_TWO_PANE_LAUNCHER_SETTINGS = "com.android.launcher3.enable_two_pane_launcher_settings";
/** @hide */
public static final String FLAG_ENABLE_TWOLINE_ALLAPPS = "com.android.launcher3.enable_twoline_allapps";
@@ -75,7 +144,7 @@ public final class Flags {
/** @hide */
public static final String FLAG_ENABLE_UNFOLD_STATE_ANIMATION = "com.android.launcher3.enable_unfold_state_animation";
/** @hide */
public static final String FLAG_ENABLE_UNFOLDED_TWO_PANE_PICKER = "com.android.launcher3.enable_unfolded_two_pane_picker";
public static final String FLAG_ENABLE_WIDGET_PICKER_REFACTOR = "com.android.launcher3.enable_widget_picker_refactor";
/** @hide */
public static final String FLAG_ENABLE_WIDGET_TAP_TO_ADD = "com.android.launcher3.enable_widget_tap_to_add";
/** @hide */
@@ -83,220 +152,698 @@ public final class Flags {
/** @hide */
public static final String FLAG_ENABLED_FOLDERS_IN_ALL_APPS = "com.android.launcher3.enabled_folders_in_all_apps";
/** @hide */
public static final String FLAG_EXPRESSIVE_THEME_IN_TASKBAR_AND_NAVIGATION = "com.android.launcher3.expressive_theme_in_taskbar_and_navigation";
/** @hide */
public static final String FLAG_EXTERNAL_DATA_ACCESS = "com.android.launcher3.external_data_access";
/** @hide */
public static final String FLAG_FLOATING_SEARCH_BAR = "com.android.launcher3.floating_search_bar";
/** @hide */
public static final String FLAG_FORCE_MONOCHROME_APP_ICONS = "com.android.launcher3.force_monochrome_app_icons";
/** @hide */
public static final String FLAG_GRID_MIGRATION_REFACTOR = "com.android.launcher3.grid_migration_refactor";
/** @hide */
public static final String FLAG_GSF_RES = "com.android.launcher3.gsf_res";
/** @hide */
public static final String FLAG_HOME_SCREEN_EDIT_IMPROVEMENTS = "com.android.launcher3.home_screen_edit_improvements";
/** @hide */
public static final String FLAG_IGNORE_THREE_FINGER_TRACKPAD_FOR_NAV_HANDLE_LONG_PRESS = "com.android.launcher3.ignore_three_finger_trackpad_for_nav_handle_long_press";
/** @hide */
public static final String FLAG_LETTER_FAST_SCROLLER = "com.android.launcher3.letter_fast_scroller";
/** @hide */
public static final String FLAG_MODEL_REPOSITORY = "com.android.launcher3.model_repository";
/** @hide */
public static final String FLAG_MSDL_FEEDBACK = "com.android.launcher3.msdl_feedback";
/** @hide */
public static final String FLAG_NUDGE_PILL = "com.android.launcher3.nudge_pill";
/** @hide */
public static final String FLAG_ONE_GRID_MOUNTED_MODE = "com.android.launcher3.one_grid_mounted_mode";
/** @hide */
public static final String FLAG_ONE_GRID_ROTATION_HANDLING = "com.android.launcher3.one_grid_rotation_handling";
/** @hide */
public static final String FLAG_ONE_GRID_SPECS = "com.android.launcher3.one_grid_specs";
/** @hide */
public static final String FLAG_PREDICTIVE_BACK_TO_HOME_BLUR = "com.android.launcher3.predictive_back_to_home_blur";
/** @hide */
public static final String FLAG_PREDICTIVE_BACK_TO_HOME_POLISH = "com.android.launcher3.predictive_back_to_home_polish";
/** @hide */
public static final String FLAG_PRIVATE_SPACE_ADD_FLOATING_MASK_VIEW = "com.android.launcher3.private_space_add_floating_mask_view";
/** @hide */
public static final String FLAG_PRIVATE_SPACE_ANIMATION = "com.android.launcher3.private_space_animation";
/** @hide */
public static final String FLAG_PRIVATE_SPACE_APP_INSTALLER_BUTTON = "com.android.launcher3.private_space_app_installer_button";
/** @hide */
public static final String FLAG_PRIVATE_SPACE_RESTRICT_ACCESSIBILITY_DRAG = "com.android.launcher3.private_space_restrict_accessibility_drag";
/** @hide */
public static final String FLAG_PRIVATE_SPACE_RESTRICT_ITEM_DRAG = "com.android.launcher3.private_space_restrict_item_drag";
/** @hide */
public static final String FLAG_PRIVATE_SPACE_SYS_APPS_SEPARATION = "com.android.launcher3.private_space_sys_apps_separation";
/** @hide */
public static final String FLAG_USE_ACTIVITY_OVERLAY = "com.android.launcher3.use_activity_overlay";
public static final String FLAG_REMOVE_APPS_REFRESH_ON_RIGHT_CLICK = "com.android.launcher3.remove_apps_refresh_on_right_click";
/** @hide */
public static final String FLAG_RESTORE_ARCHIVED_APP_ICONS_FROM_DB = "com.android.launcher3.restore_archived_app_icons_from_db";
/** @hide */
public static final String FLAG_RESTORE_ARCHIVED_SHORTCUTS = "com.android.launcher3.restore_archived_shortcuts";
/** @hide */
public static final String FLAG_SHOW_TASKBAR_PINNING_POPUP_FROM_ANYWHERE = "com.android.launcher3.show_taskbar_pinning_popup_from_anywhere";
/** @hide */
public static final String FLAG_SYNC_APP_LAUNCH_WITH_TASKBAR_STASH = "com.android.launcher3.sync_app_launch_with_taskbar_stash";
/** @hide */
public static final String FLAG_TASKBAR_QUIET_MODE_CHANGE_SUPPORT = "com.android.launcher3.taskbar_quiet_mode_change_support";
/** @hide */
public static final String FLAG_USE_NEW_ICON_FOR_ARCHIVED_APPS = "com.android.launcher3.use_new_icon_for_archived_apps";
/** @hide */
public static final String FLAG_USE_SYSTEM_RADIUS_FOR_APP_WIDGETS = "com.android.launcher3.use_system_radius_for_app_widgets";
/** @hide */
public static final String FLAG_WORK_SCHEDULER_IN_WORK_PROFILE = "com.android.launcher3.work_scheduler_in_work_profile";
public static boolean accessibilityScrollOnAllapps() {
return FEATURE_FLAGS.accessibilityScrollOnAllapps();
}
public static boolean allAppsBlur() {
return FEATURE_FLAGS.allAppsBlur();
}
public static boolean allAppsSheetForHandheld() {
return FEATURE_FLAGS.allAppsSheetForHandheld();
}
public static boolean enableAddAppWidgetViaConfigActivityV2() {
return FEATURE_FLAGS.enableAddAppWidgetViaConfigActivityV2();
}
public static boolean enableAdditionalHomeAnimations() {
return FEATURE_FLAGS.enableAdditionalHomeAnimations();
public static boolean enableAllAppsButtonInHotseat() {
return FEATURE_FLAGS.enableAllAppsButtonInHotseat();
}
public static boolean enableAltTabKqsFlatenning() {
return FEATURE_FLAGS.enableAltTabKqsFlatenning();
}
public static boolean enableAltTabKqsOnConnectedDisplays() {
return FEATURE_FLAGS.enableAltTabKqsOnConnectedDisplays();
}
public static boolean enableCategorizedWidgetSuggestions() {
return FEATURE_FLAGS.enableCategorizedWidgetSuggestions();
}
public static boolean enableContainerReturnAnimations() {
return FEATURE_FLAGS.enableContainerReturnAnimations();
}
public static boolean enableContrastTiles() {
return FEATURE_FLAGS.enableContrastTiles();
}
public static boolean enableCoroutineThreadingImprovements() {
return FEATURE_FLAGS.enableCoroutineThreadingImprovements();
}
public static boolean enableCursorHoverStates() {
return FEATURE_FLAGS.enableCursorHoverStates();
}
public static boolean enableDesktopExplodedView() {
return FEATURE_FLAGS.enableDesktopExplodedView();
}
public static boolean enableDesktopMenuOnSecondaryDisplayBugfix() {
return FEATURE_FLAGS.enableDesktopMenuOnSecondaryDisplayBugfix();
}
public static boolean enableDismissPredictionUndo() {
return FEATURE_FLAGS.enableDismissPredictionUndo();
}
public static boolean enableExpandingPauseWorkButton() {
return FEATURE_FLAGS.enableExpandingPauseWorkButton();
}
public static boolean enableExpressiveDismissTaskMotion() {
return FEATURE_FLAGS.enableExpressiveDismissTaskMotion();
}
public static boolean enableExpressiveFolderExpansion() {
return FEATURE_FLAGS.enableExpressiveFolderExpansion();
}
public static boolean enableFallbackOverviewInWindow() {
return FEATURE_FLAGS.enableFallbackOverviewInWindow();
}
public static boolean enableFirstScreenBroadcastArchivingExtras() {
return FEATURE_FLAGS.enableFirstScreenBroadcastArchivingExtras();
}
public static boolean enableFocusOutline() {
return FEATURE_FLAGS.enableFocusOutline();
}
public static boolean enableGeneratedPreviews() {
return FEATURE_FLAGS.enableGeneratedPreviews();
}
public static boolean enableGridMigrationFix() {
return FEATURE_FLAGS.enableGridMigrationFix();
public static boolean enableGestureNavHorizontalTouchSlop() {
return FEATURE_FLAGS.enableGestureNavHorizontalTouchSlop();
}
public static boolean enableGestureNavOnConnectedDisplays() {
return FEATURE_FLAGS.enableGestureNavOnConnectedDisplays();
}
public static boolean enableGridOnlyOverview() {
return FEATURE_FLAGS.enableGridOnlyOverview();
}
public static boolean enableHandleDelayedGestureCallbacks() {
return FEATURE_FLAGS.enableHandleDelayedGestureCallbacks();
public static boolean enableGrowthNudge() {
return FEATURE_FLAGS.enableGrowthNudge();
}
public static boolean enableHomeTransitionListener() {
return FEATURE_FLAGS.enableHomeTransitionListener();
}
public static boolean enableLargeDesktopWindowingTile() {
return FEATURE_FLAGS.enableLargeDesktopWindowingTile();
}
public static boolean enableLauncherBrMetricsFixed() {
return FEATURE_FLAGS.enableLauncherBrMetricsFixed();
}
public static boolean enableLauncherIconShapes() {
return FEATURE_FLAGS.enableLauncherIconShapes();
}
public static boolean enableLauncherOverviewInWindow() {
return FEATURE_FLAGS.enableLauncherOverviewInWindow();
}
public static boolean enableLauncherVisualRefresh() {
return FEATURE_FLAGS.enableLauncherVisualRefresh();
}
public static boolean enableLongPressRemoveShortcut() {
return FEATURE_FLAGS.enableLongPressRemoveShortcut();
}
public static boolean enableMouseInteractionChanges() {
return FEATURE_FLAGS.enableMouseInteractionChanges();
}
public static boolean enableMultiInstanceMenuTaskbar() {
return FEATURE_FLAGS.enableMultiInstanceMenuTaskbar();
}
public static boolean enableNarrowGridRestore() {
return FEATURE_FLAGS.enableNarrowGridRestore();
}
public static boolean enableOverviewBackgroundWallpaperBlur() {
return FEATURE_FLAGS.enableOverviewBackgroundWallpaperBlur();
}
public static boolean enableOverviewDesktopTileWallpaperBackground() {
return FEATURE_FLAGS.enableOverviewDesktopTileWallpaperBackground();
}
public static boolean enableOverviewIconMenu() {
return FEATURE_FLAGS.enableOverviewIconMenu();
}
public static boolean enableOverviewOnConnectedDisplays() {
return FEATURE_FLAGS.enableOverviewOnConnectedDisplays();
}
public static boolean enablePredictiveBackGesture() {
return FEATURE_FLAGS.enablePredictiveBackGesture();
}
public static boolean enablePrivateSpace() {
return FEATURE_FLAGS.enablePrivateSpace();
}
public static boolean enablePrivateSpaceInstallShortcut() {
return FEATURE_FLAGS.enablePrivateSpaceInstallShortcut();
}
public static boolean enableQsbOnHotseat() {
return FEATURE_FLAGS.enableQsbOnHotseat();
}
public static boolean enableRebootUnlockAnimation() {
return FEATURE_FLAGS.enableRebootUnlockAnimation();
}
public static boolean enableRecentsInTaskbar() {
return FEATURE_FLAGS.enableRecentsInTaskbar();
}
public static boolean enableRecentsWindowProtoLog() {
return FEATURE_FLAGS.enableRecentsWindowProtoLog();
}
public static boolean enableRefactorDigitalWellbeingToast() {
return FEATURE_FLAGS.enableRefactorDigitalWellbeingToast();
}
public static boolean enableRefactorTaskContentView() {
return FEATURE_FLAGS.enableRefactorTaskContentView();
}
public static boolean enableRefactorTaskThumbnail() {
return FEATURE_FLAGS.enableRefactorTaskThumbnail();
}
public static boolean enableResponsiveWorkspace() {
return FEATURE_FLAGS.enableResponsiveWorkspace();
}
public static boolean enableReversibleHomeActionCorner() {
return FEATURE_FLAGS.enableReversibleHomeActionCorner();
}
public static boolean enableScalabilityForDesktopExperience() {
return FEATURE_FLAGS.enableScalabilityForDesktopExperience();
}
public static boolean enableScalingRevealHomeAnimation() {
return FEATURE_FLAGS.enableScalingRevealHomeAnimation();
}
public static boolean enableShortcutDontSuggestApp() {
return FEATURE_FLAGS.enableShortcutDontSuggestApp();
public static boolean enableSimultaneousOverviewTriggerOnExtendedDesktop() {
return FEATURE_FLAGS.enableSimultaneousOverviewTriggerOnExtendedDesktop();
}
public static boolean enableSmartspaceAsAWidget() {
return FEATURE_FLAGS.enableSmartspaceAsAWidget();
public static boolean enableStateManagerProtoLog() {
return FEATURE_FLAGS.enableStateManagerProtoLog();
}
public static boolean enableSmartspaceRemovalToggle() {
return FEATURE_FLAGS.enableSmartspaceRemovalToggle();
public static boolean enableStrictMode() {
return FEATURE_FLAGS.enableStrictMode();
}
public static boolean enableSupportForArchiving() {
return FEATURE_FLAGS.enableSupportForArchiving();
}
public static boolean enableTabletTwoPanePickerV2() {
return FEATURE_FLAGS.enableTabletTwoPanePickerV2();
}
public static boolean enableTaskbarBehindShade() {
return FEATURE_FLAGS.enableTaskbarBehindShade();
}
public static boolean enableTaskbarCustomization() {
return FEATURE_FLAGS.enableTaskbarCustomization();
}
public static boolean enableTaskbarForDirectBoot() {
return FEATURE_FLAGS.enableTaskbarForDirectBoot();
}
public static boolean enableTaskbarNoRecreate() {
return FEATURE_FLAGS.enableTaskbarNoRecreate();
}
public static boolean enableTaskbarPinning() {
return FEATURE_FLAGS.enableTaskbarPinning();
}
public static boolean enableTaskbarUiThread() {
return FEATURE_FLAGS.enableTaskbarUiThread();
}
public static boolean enableTieredWidgetsByDefaultInPicker() {
return FEATURE_FLAGS.enableTieredWidgetsByDefaultInPicker();
}
public static boolean enableTwoPaneLauncherSettings() {
return FEATURE_FLAGS.enableTwoPaneLauncherSettings();
}
public static boolean enableTwolineAllapps() {
return FEATURE_FLAGS.enableTwolineAllapps();
}
public static boolean enableTwolineToggle() {
return FEATURE_FLAGS.enableTwolineToggle();
}
public static boolean enableUnfoldStateAnimation() {
return FEATURE_FLAGS.enableUnfoldStateAnimation();
}
public static boolean enableUnfoldedTwoPanePicker() {
return FEATURE_FLAGS.enableUnfoldedTwoPanePicker();
public static boolean enableWidgetPickerRefactor() {
return FEATURE_FLAGS.enableWidgetPickerRefactor();
}
public static boolean enableWidgetTapToAdd() {
return FEATURE_FLAGS.enableWidgetTapToAdd();
}
public static boolean enableWorkspaceInflation() {
return FEATURE_FLAGS.enableWorkspaceInflation();
}
public static boolean enabledFoldersInAllApps() {
return FEATURE_FLAGS.enabledFoldersInAllApps();
}
public static boolean expressiveThemeInTaskbarAndNavigation() {
return FEATURE_FLAGS.expressiveThemeInTaskbarAndNavigation();
}
public static boolean externalDataAccess() {
return FEATURE_FLAGS.externalDataAccess();
}
public static boolean floatingSearchBar() {
return FEATURE_FLAGS.floatingSearchBar();
}
public static boolean forceMonochromeAppIcons() {
return FEATURE_FLAGS.forceMonochromeAppIcons();
}
public static boolean gridMigrationRefactor() {
return FEATURE_FLAGS.gridMigrationRefactor();
}
public static boolean gsfRes() {
return FEATURE_FLAGS.gsfRes();
}
public static boolean homeScreenEditImprovements() {
return FEATURE_FLAGS.homeScreenEditImprovements();
}
public static boolean ignoreThreeFingerTrackpadForNavHandleLongPress() {
return FEATURE_FLAGS.ignoreThreeFingerTrackpadForNavHandleLongPress();
}
public static boolean letterFastScroller() {
return FEATURE_FLAGS.letterFastScroller();
}
public static boolean modelRepository() {
return FEATURE_FLAGS.modelRepository();
}
public static boolean msdlFeedback() {
return FEATURE_FLAGS.msdlFeedback();
}
public static boolean nudgePill() {
return FEATURE_FLAGS.nudgePill();
}
public static boolean oneGridMountedMode() {
return FEATURE_FLAGS.oneGridMountedMode();
}
public static boolean oneGridRotationHandling() {
return FEATURE_FLAGS.oneGridRotationHandling();
}
public static boolean oneGridSpecs() {
return FEATURE_FLAGS.oneGridSpecs();
}
public static boolean predictiveBackToHomeBlur() {
return FEATURE_FLAGS.predictiveBackToHomeBlur();
}
public static boolean predictiveBackToHomePolish() {
return FEATURE_FLAGS.predictiveBackToHomePolish();
}
public static boolean privateSpaceAddFloatingMaskView() {
return FEATURE_FLAGS.privateSpaceAddFloatingMaskView();
}
public static boolean privateSpaceAnimation() {
return FEATURE_FLAGS.privateSpaceAnimation();
}
public static boolean privateSpaceAppInstallerButton() {
return FEATURE_FLAGS.privateSpaceAppInstallerButton();
}
public static boolean privateSpaceRestrictAccessibilityDrag() {
return FEATURE_FLAGS.privateSpaceRestrictAccessibilityDrag();
}
public static boolean privateSpaceRestrictItemDrag() {
return FEATURE_FLAGS.privateSpaceRestrictItemDrag();
}
public static boolean privateSpaceSysAppsSeparation() {
return FEATURE_FLAGS.privateSpaceSysAppsSeparation();
}
public static boolean useActivityOverlay() {
return FEATURE_FLAGS.useActivityOverlay();
public static boolean removeAppsRefreshOnRightClick() {
return FEATURE_FLAGS.removeAppsRefreshOnRightClick();
}
public static boolean restoreArchivedAppIconsFromDb() {
return FEATURE_FLAGS.restoreArchivedAppIconsFromDb();
}
public static boolean restoreArchivedShortcuts() {
return FEATURE_FLAGS.restoreArchivedShortcuts();
}
public static boolean showTaskbarPinningPopupFromAnywhere() {
return FEATURE_FLAGS.showTaskbarPinningPopupFromAnywhere();
}
public static boolean syncAppLaunchWithTaskbarStash() {
return FEATURE_FLAGS.syncAppLaunchWithTaskbarStash();
}
public static boolean taskbarQuietModeChangeSupport() {
return FEATURE_FLAGS.taskbarQuietModeChangeSupport();
}
public static boolean useNewIconForArchivedApps() {
return FEATURE_FLAGS.useNewIconForArchivedApps();
}
public static boolean useSystemRadiusForAppWidgets() {
return FEATURE_FLAGS.useSystemRadiusForAppWidgets();
}
public static boolean workSchedulerInWorkProfile() {
return FEATURE_FLAGS.workSchedulerInWorkProfile();
}
private static FeatureFlags FEATURE_FLAGS = new FeatureFlagsImpl();
}
}
@@ -20,61 +20,72 @@ import android.app.ActivityThread
import android.content.Context
import android.content.SharedPreferences
import android.content.SharedPreferences.OnSharedPreferenceChangeListener
import android.provider.DeviceConfig
import android.provider.DeviceConfig.OnPropertiesChangedListener
import android.provider.DeviceConfig.Properties
import androidx.annotation.WorkerThread
import java.util.concurrent.CopyOnWriteArrayList
/** Utility class to manage a set of device configurations */
class DeviceConfigHelper<ConfigType>(private val factory: (PropReader) -> ConfigType) {
var config: ConfigType
private set
private val allKeys: Set<String>
private val propertiesListener = OnPropertiesChangedListener { onDevicePropsChanges(it) }
private val sharedPrefChangeListener = OnSharedPreferenceChangeListener { _, _ ->
recreateConfig()
}
private val changeListeners = mutableListOf<Runnable>()
private val changeListeners = CopyOnWriteArrayList<Runnable>()
init {
// Initialize the default config once.
allKeys = HashSet()
config = factory(
PropReader(
object : PropProvider {
override fun <T : Any> get(key: String, fallback: T): T {
val prefs = prefs
allKeys.add(key)
return when (fallback) {
is Int -> prefs.getInt(key, fallback) as T
is Boolean -> prefs.getBoolean(key, fallback) as T
else -> fallback
config =
factory(
PropReader(
object : PropProvider {
override fun <T : Any> get(key: String, fallback: T): T {
val prefs = prefs
if (fallback is Int) {
allKeys.add(key)
return prefs.getInt(key, fallback) as T
} else if (fallback is Boolean) {
allKeys.add(key)
return prefs.getBoolean(key, fallback) as T
} else return fallback
}
}
}
)
)
)
prefs.registerOnSharedPreferenceChangeListener(sharedPrefChangeListener)
}
@WorkerThread
private fun onDevicePropsChanges() {
private fun onDevicePropsChanges(properties: Properties) {
if (NAMESPACE_LAUNCHER != properties.namespace) return
if (!allKeys.any(properties.keyset::contains)) return
recreateConfig()
}
private fun recreateConfig() {
config = factory(
PropReader(
object : PropProvider {
override fun <T : Any> get(key: String, fallback: T): T {
return when (fallback) {
is Int -> prefs.getInt(key, fallback) as T
is Boolean -> prefs.getBoolean(key, fallback) as T
else -> fallback
val myProps =
DeviceConfig.getProperties(NAMESPACE_LAUNCHER, *allKeys.toTypedArray<String>())
config =
factory(
PropReader(
object : PropProvider {
override fun <T : Any> get(key: String, fallback: T): T {
if (fallback is Int) return myProps.getInt(key, fallback) as T
else if (fallback is Boolean)
return myProps.getBoolean(key, fallback) as T
else return fallback
}
}
}
)
)
)
}
/** Adds a listener for property changes */
@@ -84,6 +95,7 @@ class DeviceConfigHelper<ConfigType>(private val factory: (PropReader) -> Config
fun removeChangeListener(r: Runnable) = changeListeners.remove(r)
fun close() {
DeviceConfig.removeOnPropertiesChangedListener(propertiesListener)
prefs.unregisterOnSharedPreferenceChangeListener(sharedPrefChangeListener)
}
File diff suppressed because it is too large. Load diff
@@ -3,7 +3,6 @@ package com.android.systemui;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Predicate;
/** @hide */
public class FakeFeatureFlagsImpl extends CustomFeatureFlags {
private final Map<String, Boolean> mFlagMap = new HashMap<>();
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
@@ -1,13 +1,12 @@
package com.android.systemui.shared;
// TODO(b/303773055): Remove the annotation after access issue is resolved.
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.function.BiPredicate;
import java.util.function.Predicate;
/** @hide */
public class CustomFeatureFlags implements FeatureFlags {
@@ -17,56 +16,196 @@ public class CustomFeatureFlags implements FeatureFlags {
mGetValueImpl = getValueImpl;
}
@Override
public boolean ambientAod() {
return getValue(Flags.FLAG_AMBIENT_AOD,
FeatureFlags::ambientAod);
}
@Override
public boolean bouncerAreaExclusion() {
return getValue(Flags.FLAG_BOUNCER_AREA_EXCLUSION,
FeatureFlags::bouncerAreaExclusion);
FeatureFlags::bouncerAreaExclusion);
}
@Override
public boolean clockReactiveSmartspaceLayout() {
return getValue(Flags.FLAG_CLOCK_REACTIVE_SMARTSPACE_LAYOUT,
FeatureFlags::clockReactiveSmartspaceLayout);
}
@Override
public boolean clockReactiveVariants() {
return getValue(Flags.FLAG_CLOCK_REACTIVE_VARIANTS,
FeatureFlags::clockReactiveVariants);
}
@Override
public boolean cursorHotCorner() {
return getValue(Flags.FLAG_CURSOR_HOT_CORNER,
FeatureFlags::cursorHotCorner);
}
@Override
public boolean enableHomeDelay() {
return getValue(Flags.FLAG_ENABLE_HOME_DELAY,
FeatureFlags::enableHomeDelay);
FeatureFlags::enableHomeDelay);
}
@Override
public boolean enableLppAssistInvocationEffect() {
return getValue(Flags.FLAG_ENABLE_LPP_ASSIST_INVOCATION_EFFECT,
FeatureFlags::enableLppAssistInvocationEffect);
}
@Override
public boolean enableLppAssistInvocationHapticEffect() {
return getValue(Flags.FLAG_ENABLE_LPP_ASSIST_INVOCATION_HAPTIC_EFFECT,
FeatureFlags::enableLppAssistInvocationHapticEffect);
}
@Override
public boolean exampleSharedFlag() {
return getValue(Flags.FLAG_EXAMPLE_SHARED_FLAG,
FeatureFlags::exampleSharedFlag);
FeatureFlags::exampleSharedFlag);
}
@Override
public boolean extendedWallpaperEffects() {
return getValue(Flags.FLAG_EXTENDED_WALLPAPER_EFFECTS,
FeatureFlags::extendedWallpaperEffects);
}
@Override
public boolean extendibleThemeManager() {
return getValue(Flags.FLAG_EXTENDIBLE_THEME_MANAGER,
FeatureFlags::extendibleThemeManager);
}
@Override
public boolean lockscreenCustomClocks() {
return getValue(Flags.FLAG_LOCKSCREEN_CUSTOM_CLOCKS,
FeatureFlags::lockscreenCustomClocks);
}
@Override
public boolean newCustomizationPickerUi() {
return getValue(Flags.FLAG_NEW_CUSTOMIZATION_PICKER_UI,
FeatureFlags::newCustomizationPickerUi);
}
@Override
public boolean newTouchpadGesturesTutorial() {
return getValue(Flags.FLAG_NEW_TOUCHPAD_GESTURES_TUTORIAL,
FeatureFlags::newTouchpadGesturesTutorial);
}
@Override
public boolean returnAnimationFrameworkLibrary() {
return getValue(Flags.FLAG_RETURN_ANIMATION_FRAMEWORK_LIBRARY,
FeatureFlags::returnAnimationFrameworkLibrary);
FeatureFlags::returnAnimationFrameworkLibrary);
}
@Override
public boolean returnAnimationFrameworkLongLived() {
return getValue(Flags.FLAG_RETURN_ANIMATION_FRAMEWORK_LONG_LIVED,
FeatureFlags::returnAnimationFrameworkLongLived);
}
@Override
public boolean screenshotContextUrl() {
return getValue(Flags.FLAG_SCREENSHOT_CONTEXT_URL,
FeatureFlags::screenshotContextUrl);
}
@Override
public boolean shadeAllowBackGesture() {
return getValue(Flags.FLAG_SHADE_ALLOW_BACK_GESTURE,
FeatureFlags::shadeAllowBackGesture);
FeatureFlags::shadeAllowBackGesture);
}
@Override
public boolean sidefpsControllerRefactor() {
return getValue(Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR,
FeatureFlags::sidefpsControllerRefactor);
FeatureFlags::sidefpsControllerRefactor);
}
@Override
public boolean smartspaceSportsCardBackground() {
return getValue(Flags.FLAG_SMARTSPACE_SPORTS_CARD_BACKGROUND,
FeatureFlags::smartspaceSportsCardBackground);
}
@Override
public boolean smartspaceUiUpdate() {
return getValue(Flags.FLAG_SMARTSPACE_UI_UPDATE,
FeatureFlags::smartspaceUiUpdate);
}
@Override
public boolean smartspaceUiUpdateResources() {
return getValue(Flags.FLAG_SMARTSPACE_UI_UPDATE_RESOURCES,
FeatureFlags::smartspaceUiUpdateResources);
}
@Override
public boolean smartspaceWeatherUseMonochromeFontIcons() {
return getValue(Flags.FLAG_SMARTSPACE_WEATHER_USE_MONOCHROME_FONT_ICONS,
FeatureFlags::smartspaceWeatherUseMonochromeFontIcons);
}
@Override
public boolean statusBarConnectedDisplays() {
return getValue(Flags.FLAG_STATUS_BAR_CONNECTED_DISPLAYS,
FeatureFlags::statusBarConnectedDisplays);
}
@Override
public boolean threeButtonCornerSwipe() {
return getValue(Flags.FLAG_THREE_BUTTON_CORNER_SWIPE,
FeatureFlags::threeButtonCornerSwipe);
}
@Override
public boolean usePreferredImageEditor() {
return getValue(Flags.FLAG_USE_PREFERRED_IMAGE_EDITOR,
FeatureFlags::usePreferredImageEditor);
}
public boolean isFlagReadOnlyOptimized(String flagName) {
if (mReadOnlyFlagsSet.contains(flagName) &&
isOptimizationEnabled()) {
return true;
isOptimizationEnabled()) {
return true;
}
return false;
}
private boolean isOptimizationEnabled() {
return false;
}
@@ -77,18 +216,64 @@ public class CustomFeatureFlags implements FeatureFlags {
public List<String> getFlagNames() {
return Arrays.asList(
Flags.FLAG_BOUNCER_AREA_EXCLUSION,
Flags.FLAG_ENABLE_HOME_DELAY,
Flags.FLAG_EXAMPLE_SHARED_FLAG,
Flags.FLAG_RETURN_ANIMATION_FRAMEWORK_LIBRARY,
Flags.FLAG_SHADE_ALLOW_BACK_GESTURE,
Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR
Flags.FLAG_AMBIENT_AOD,
Flags.FLAG_BOUNCER_AREA_EXCLUSION,
Flags.FLAG_CLOCK_REACTIVE_SMARTSPACE_LAYOUT,
Flags.FLAG_CLOCK_REACTIVE_VARIANTS,
Flags.FLAG_CURSOR_HOT_CORNER,
Flags.FLAG_ENABLE_HOME_DELAY,
Flags.FLAG_ENABLE_LPP_ASSIST_INVOCATION_EFFECT,
Flags.FLAG_ENABLE_LPP_ASSIST_INVOCATION_HAPTIC_EFFECT,
Flags.FLAG_EXAMPLE_SHARED_FLAG,
Flags.FLAG_EXTENDED_WALLPAPER_EFFECTS,
Flags.FLAG_EXTENDIBLE_THEME_MANAGER,
Flags.FLAG_LOCKSCREEN_CUSTOM_CLOCKS,
Flags.FLAG_NEW_CUSTOMIZATION_PICKER_UI,
Flags.FLAG_NEW_TOUCHPAD_GESTURES_TUTORIAL,
Flags.FLAG_RETURN_ANIMATION_FRAMEWORK_LIBRARY,
Flags.FLAG_RETURN_ANIMATION_FRAMEWORK_LONG_LIVED,
Flags.FLAG_SCREENSHOT_CONTEXT_URL,
Flags.FLAG_SHADE_ALLOW_BACK_GESTURE,
Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR,
Flags.FLAG_SMARTSPACE_SPORTS_CARD_BACKGROUND,
Flags.FLAG_SMARTSPACE_UI_UPDATE,
Flags.FLAG_SMARTSPACE_UI_UPDATE_RESOURCES,
Flags.FLAG_SMARTSPACE_WEATHER_USE_MONOCHROME_FONT_ICONS,
Flags.FLAG_STATUS_BAR_CONNECTED_DISPLAYS,
Flags.FLAG_THREE_BUTTON_CORNER_SWIPE,
Flags.FLAG_USE_PREFERRED_IMAGE_EDITOR
);
}
private Set<String> mReadOnlyFlagsSet = new HashSet<>(
Arrays.asList(
""
)
Arrays.asList(
Flags.FLAG_AMBIENT_AOD,
Flags.FLAG_BOUNCER_AREA_EXCLUSION,
Flags.FLAG_CLOCK_REACTIVE_SMARTSPACE_LAYOUT,
Flags.FLAG_CLOCK_REACTIVE_VARIANTS,
Flags.FLAG_CURSOR_HOT_CORNER,
Flags.FLAG_ENABLE_HOME_DELAY,
Flags.FLAG_ENABLE_LPP_ASSIST_INVOCATION_EFFECT,
Flags.FLAG_ENABLE_LPP_ASSIST_INVOCATION_HAPTIC_EFFECT,
Flags.FLAG_EXAMPLE_SHARED_FLAG,
Flags.FLAG_EXTENDED_WALLPAPER_EFFECTS,
Flags.FLAG_EXTENDIBLE_THEME_MANAGER,
Flags.FLAG_LOCKSCREEN_CUSTOM_CLOCKS,
Flags.FLAG_NEW_CUSTOMIZATION_PICKER_UI,
Flags.FLAG_NEW_TOUCHPAD_GESTURES_TUTORIAL,
Flags.FLAG_RETURN_ANIMATION_FRAMEWORK_LIBRARY,
Flags.FLAG_RETURN_ANIMATION_FRAMEWORK_LONG_LIVED,
Flags.FLAG_SCREENSHOT_CONTEXT_URL,
Flags.FLAG_SHADE_ALLOW_BACK_GESTURE,
Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR,
Flags.FLAG_SMARTSPACE_SPORTS_CARD_BACKGROUND,
Flags.FLAG_SMARTSPACE_UI_UPDATE,
Flags.FLAG_SMARTSPACE_UI_UPDATE_RESOURCES,
Flags.FLAG_SMARTSPACE_WEATHER_USE_MONOCHROME_FONT_ICONS,
Flags.FLAG_STATUS_BAR_CONNECTED_DISPLAYS,
Flags.FLAG_THREE_BUTTON_CORNER_SWIPE,
Flags.FLAG_USE_PREFERRED_IMAGE_EDITOR,
""
)
);
}
@@ -3,7 +3,6 @@ package com.android.systemui.shared;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Predicate;
/** @hide */
public class FakeFeatureFlagsImpl extends CustomFeatureFlags {
private final Map<String, Boolean> mFlagMap = new HashMap<>();
@@ -1,24 +1,110 @@
package com.android.systemui.shared;
// TODO(b/303773055): Remove the annotation after access issue is resolved.
/** @hide */
public interface FeatureFlags {
boolean ambientAod();
boolean bouncerAreaExclusion();
boolean clockReactiveSmartspaceLayout();
boolean clockReactiveVariants();
boolean cursorHotCorner();
boolean enableHomeDelay();
boolean enableLppAssistInvocationEffect();
boolean enableLppAssistInvocationHapticEffect();
boolean exampleSharedFlag();
boolean extendedWallpaperEffects();
boolean extendibleThemeManager();
boolean lockscreenCustomClocks();
boolean newCustomizationPickerUi();
boolean newTouchpadGesturesTutorial();
boolean returnAnimationFrameworkLibrary();
boolean returnAnimationFrameworkLongLived();
boolean screenshotContextUrl();
boolean shadeAllowBackGesture();
boolean sidefpsControllerRefactor();
boolean smartspaceSportsCardBackground();
boolean smartspaceUiUpdate();
boolean smartspaceUiUpdateResources();
boolean smartspaceWeatherUseMonochromeFontIcons();
boolean statusBarConnectedDisplays();
boolean threeButtonCornerSwipe();
boolean usePreferredImageEditor();
}
@@ -1,195 +1,187 @@
package com.android.systemui.shared;
// TODO(b/303773055): Remove the annotation after access issue is resolved.
import com.android.quickstep.util.DeviceConfigHelper;
import java.nio.file.Files;
import java.nio.file.Paths;
/** @hide */
public final class FeatureFlagsImpl implements FeatureFlags {
private static final boolean isReadFromNew = Files.exists(Paths.get("/metadata/aconfig/boot/enable_only_new_storage"));
private static volatile boolean isCached = false;
private static volatile boolean biometrics_framework_is_cached = false;
private static volatile boolean systemui_is_cached = false;
private static boolean bouncerAreaExclusion = true;
private static boolean enableHomeDelay = false;
private static boolean exampleSharedFlag = false;
private static boolean returnAnimationFrameworkLibrary = false;
private static boolean shadeAllowBackGesture = false;
private static boolean sidefpsControllerRefactor = true;
@Override
private void init() {
boolean foundPackage = true;
sidefpsControllerRefactor = foundPackage;
bouncerAreaExclusion = foundPackage;
enableHomeDelay = foundPackage;
exampleSharedFlag = foundPackage;
returnAnimationFrameworkLibrary = foundPackage ;
shadeAllowBackGesture = foundPackage;
isCached = true;
}
private void load_overrides_biometrics_framework() {
try {
var properties = DeviceConfigHelper.Companion.getPrefs();
sidefpsControllerRefactor =
properties.getBoolean(Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR, true);
} catch (NullPointerException e) {
throw new RuntimeException(
"Cannot read value from namespace biometrics_framework "
+ "from DeviceConfig. It could be that the code using flag "
+ "executed before SettingsProvider initialization. Please use "
+ "fixed read-only flag by adding is_fixed_read_only: true in "
+ "flag declaration.",
e
);
}
biometrics_framework_is_cached = true;
}
private void load_overrides_systemui() {
try {
var properties = DeviceConfigHelper.Companion.getPrefs();
bouncerAreaExclusion =
properties.getBoolean(Flags.FLAG_BOUNCER_AREA_EXCLUSION, true);
enableHomeDelay =
properties.getBoolean(Flags.FLAG_ENABLE_HOME_DELAY, false);
exampleSharedFlag =
properties.getBoolean(Flags.FLAG_EXAMPLE_SHARED_FLAG, false);
returnAnimationFrameworkLibrary =
properties.getBoolean(Flags.FLAG_RETURN_ANIMATION_FRAMEWORK_LIBRARY, false);
shadeAllowBackGesture =
properties.getBoolean(Flags.FLAG_SHADE_ALLOW_BACK_GESTURE, false);
} catch (NullPointerException e) {
throw new RuntimeException(
"Cannot read value from namespace systemui "
+ "from DeviceConfig. It could be that the code using flag "
+ "executed before SettingsProvider initialization. Please use "
+ "fixed read-only flag by adding is_fixed_read_only: true in "
+ "flag declaration.",
e
);
}
systemui_is_cached = true;
public boolean ambientAod() {
return true;
}
@Override
public boolean bouncerAreaExclusion() {
if (isReadFromNew) {
if (!isCached) {
init();
}
} else {
if (!systemui_is_cached) {
load_overrides_systemui();
}
}
return bouncerAreaExclusion;
return true;
}
@Override
public boolean clockReactiveSmartspaceLayout() {
return true;
}
@Override
public boolean clockReactiveVariants() {
return true;
}
@Override
public boolean cursorHotCorner() {
return false;
}
@Override
public boolean enableHomeDelay() {
if (isReadFromNew) {
if (!isCached) {
init();
}
} else {
if (!systemui_is_cached) {
load_overrides_systemui();
}
}
return enableHomeDelay;
return false;
}
@Override
public boolean enableLppAssistInvocationEffect() {
return true;
}
@Override
public boolean enableLppAssistInvocationHapticEffect() {
return true;
}
@Override
public boolean exampleSharedFlag() {
if (isReadFromNew) {
if (!isCached) {
init();
}
} else {
if (!systemui_is_cached) {
load_overrides_systemui();
}
}
return exampleSharedFlag;
return false;
}
@Override
public boolean extendedWallpaperEffects() {
return true;
}
@Override
public boolean extendibleThemeManager() {
return false;
}
@Override
public boolean lockscreenCustomClocks() {
return true;
}
@Override
public boolean newCustomizationPickerUi() {
return true;
}
@Override
public boolean newTouchpadGesturesTutorial() {
return true;
}
@Override
public boolean returnAnimationFrameworkLibrary() {
if (isReadFromNew) {
if (!isCached) {
init();
}
} else {
if (!systemui_is_cached) {
load_overrides_systemui();
}
}
return returnAnimationFrameworkLibrary;
return true;
}
@Override
public boolean returnAnimationFrameworkLongLived() {
return true;
}
@Override
public boolean screenshotContextUrl() {
return false;
}
@Override
public boolean shadeAllowBackGesture() {
if (isReadFromNew) {
if (!isCached) {
init();
}
} else {
if (!systemui_is_cached) {
load_overrides_systemui();
}
}
return shadeAllowBackGesture;
return false;
}
@Override
public boolean sidefpsControllerRefactor() {
if (isReadFromNew) {
if (!isCached) {
init();
}
} else {
if (!biometrics_framework_is_cached) {
load_overrides_biometrics_framework();
}
}
return sidefpsControllerRefactor;
public boolean sidefpsControllerRefactor() {
return true;
}
@Override
public boolean smartspaceSportsCardBackground() {
return false;
}
@Override
public boolean smartspaceUiUpdate() {
return true;
}
@Override
public boolean smartspaceUiUpdateResources() {
return true;
}
@Override
public boolean smartspaceWeatherUseMonochromeFontIcons() {
return false;
}
@Override
public boolean statusBarConnectedDisplays() {
return false;
}
@Override
public boolean threeButtonCornerSwipe() {
return false;
}
@Override
public boolean usePreferredImageEditor() {
return true;
}
}
+180 -13
View File
@@ -1,50 +1,217 @@
package com.android.systemui.shared;
// TODO(b/303773055): Remove the annotation after access issue is resolved.
/** @hide */
public final class Flags {
/** @hide */
public static final String FLAG_AMBIENT_AOD = "com.android.systemui.shared.ambient_aod";
/** @hide */
public static final String FLAG_BOUNCER_AREA_EXCLUSION = "com.android.systemui.shared.bouncer_area_exclusion";
/** @hide */
public static final String FLAG_CLOCK_REACTIVE_SMARTSPACE_LAYOUT = "com.android.systemui.shared.clock_reactive_smartspace_layout";
/** @hide */
public static final String FLAG_CLOCK_REACTIVE_VARIANTS = "com.android.systemui.shared.clock_reactive_variants";
/** @hide */
public static final String FLAG_CURSOR_HOT_CORNER = "com.android.systemui.shared.cursor_hot_corner";
/** @hide */
public static final String FLAG_ENABLE_HOME_DELAY = "com.android.systemui.shared.enable_home_delay";
/** @hide */
public static final String FLAG_ENABLE_LPP_ASSIST_INVOCATION_EFFECT = "com.android.systemui.shared.enable_lpp_assist_invocation_effect";
/** @hide */
public static final String FLAG_ENABLE_LPP_ASSIST_INVOCATION_HAPTIC_EFFECT = "com.android.systemui.shared.enable_lpp_assist_invocation_haptic_effect";
/** @hide */
public static final String FLAG_EXAMPLE_SHARED_FLAG = "com.android.systemui.shared.example_shared_flag";
/** @hide */
public static final String FLAG_EXTENDED_WALLPAPER_EFFECTS = "com.android.systemui.shared.extended_wallpaper_effects";
/** @hide */
public static final String FLAG_EXTENDIBLE_THEME_MANAGER = "com.android.systemui.shared.extendible_theme_manager";
/** @hide */
public static final String FLAG_LOCKSCREEN_CUSTOM_CLOCKS = "com.android.systemui.shared.lockscreen_custom_clocks";
/** @hide */
public static final String FLAG_NEW_CUSTOMIZATION_PICKER_UI = "com.android.systemui.shared.new_customization_picker_ui";
/** @hide */
public static final String FLAG_NEW_TOUCHPAD_GESTURES_TUTORIAL = "com.android.systemui.shared.new_touchpad_gestures_tutorial";
/** @hide */
public static final String FLAG_RETURN_ANIMATION_FRAMEWORK_LIBRARY = "com.android.systemui.shared.return_animation_framework_library";
/** @hide */
public static final String FLAG_RETURN_ANIMATION_FRAMEWORK_LONG_LIVED = "com.android.systemui.shared.return_animation_framework_long_lived";
/** @hide */
public static final String FLAG_SCREENSHOT_CONTEXT_URL = "com.android.systemui.shared.screenshot_context_url";
/** @hide */
public static final String FLAG_SHADE_ALLOW_BACK_GESTURE = "com.android.systemui.shared.shade_allow_back_gesture";
/** @hide */
public static final String FLAG_SIDEFPS_CONTROLLER_REFACTOR = "com.android.systemui.shared.sidefps_controller_refactor";
/** @hide */
public static final String FLAG_SMARTSPACE_SPORTS_CARD_BACKGROUND = "com.android.systemui.shared.smartspace_sports_card_background";
/** @hide */
public static final String FLAG_SMARTSPACE_UI_UPDATE = "com.android.systemui.shared.smartspace_ui_update";
/** @hide */
public static final String FLAG_SMARTSPACE_UI_UPDATE_RESOURCES = "com.android.systemui.shared.smartspace_ui_update_resources";
/** @hide */
public static final String FLAG_SMARTSPACE_WEATHER_USE_MONOCHROME_FONT_ICONS = "com.android.systemui.shared.smartspace_weather_use_monochrome_font_icons";
/** @hide */
public static final String FLAG_STATUS_BAR_CONNECTED_DISPLAYS = "com.android.systemui.shared.status_bar_connected_displays";
/** @hide */
public static final String FLAG_THREE_BUTTON_CORNER_SWIPE = "com.android.systemui.shared.three_button_corner_swipe";
/** @hide */
public static final String FLAG_USE_PREFERRED_IMAGE_EDITOR = "com.android.systemui.shared.use_preferred_image_editor";
public static boolean ambientAod() {
return FEATURE_FLAGS.ambientAod();
}
public static boolean bouncerAreaExclusion() {
return FEATURE_FLAGS.bouncerAreaExclusion();
}
public static boolean clockReactiveSmartspaceLayout() {
return FEATURE_FLAGS.clockReactiveSmartspaceLayout();
}
public static boolean clockReactiveVariants() {
return FEATURE_FLAGS.clockReactiveVariants();
}
public static boolean cursorHotCorner() {
return FEATURE_FLAGS.cursorHotCorner();
}
public static boolean enableHomeDelay() {
return FEATURE_FLAGS.enableHomeDelay();
}
public static boolean enableLppAssistInvocationEffect() {
return FEATURE_FLAGS.enableLppAssistInvocationEffect();
}
public static boolean enableLppAssistInvocationHapticEffect() {
return FEATURE_FLAGS.enableLppAssistInvocationHapticEffect();
}
public static boolean exampleSharedFlag() {
return FEATURE_FLAGS.exampleSharedFlag();
}
public static boolean extendedWallpaperEffects() {
return FEATURE_FLAGS.extendedWallpaperEffects();
}
public static boolean extendibleThemeManager() {
return FEATURE_FLAGS.extendibleThemeManager();
}
public static boolean lockscreenCustomClocks() {
return FEATURE_FLAGS.lockscreenCustomClocks();
}
public static boolean newCustomizationPickerUi() {
return FEATURE_FLAGS.newCustomizationPickerUi();
}
public static boolean newTouchpadGesturesTutorial() {
return FEATURE_FLAGS.newTouchpadGesturesTutorial();
}
public static boolean returnAnimationFrameworkLibrary() {
return FEATURE_FLAGS.returnAnimationFrameworkLibrary();
}
public static boolean returnAnimationFrameworkLongLived() {
return FEATURE_FLAGS.returnAnimationFrameworkLongLived();
}
public static boolean screenshotContextUrl() {
return FEATURE_FLAGS.screenshotContextUrl();
}
public static boolean shadeAllowBackGesture() {
return FEATURE_FLAGS.shadeAllowBackGesture();
}
public static boolean sidefpsControllerRefactor() {
return FEATURE_FLAGS.sidefpsControllerRefactor();
}
public static boolean smartspaceSportsCardBackground() {
return FEATURE_FLAGS.smartspaceSportsCardBackground();
}
public static boolean smartspaceUiUpdate() {
return FEATURE_FLAGS.smartspaceUiUpdate();
}
public static boolean smartspaceUiUpdateResources() {
return FEATURE_FLAGS.smartspaceUiUpdateResources();
}
public static boolean smartspaceWeatherUseMonochromeFontIcons() {
return FEATURE_FLAGS.smartspaceWeatherUseMonochromeFontIcons();
}
public static boolean statusBarConnectedDisplays() {
return FEATURE_FLAGS.statusBarConnectedDisplays();
}
public static boolean threeButtonCornerSwipe() {
return FEATURE_FLAGS.threeButtonCornerSwipe();
}
public static boolean usePreferredImageEditor() {
return FEATURE_FLAGS.usePreferredImageEditor();
}
private static FeatureFlags FEATURE_FLAGS = new FeatureFlagsImpl();
}
File diff suppressed because it is too large. Load diff
@@ -3,7 +3,6 @@ package com.android.window.flags2;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Predicate;
/** @hide */
public class FakeFeatureFlagsImpl extends CustomFeatureFlags {
private final Map<String, Boolean> mFlagMap = new HashMap<>();
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
@@ -1,13 +1,12 @@
package com.android.wm.shell;
// TODO(b/303773055): Remove the annotation after access issue is resolved.
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.function.BiPredicate;
import java.util.function.Predicate;
/** @hide */
public class CustomFeatureFlags implements FeatureFlags {
@@ -18,124 +17,237 @@ public class CustomFeatureFlags implements FeatureFlags {
}
@Override
public boolean animateBubbleSizeChange() {
return getValue(Flags.FLAG_ANIMATE_BUBBLE_SIZE_CHANGE,
FeatureFlags::animateBubbleSizeChange);
public boolean enableAutoTaskStackController() {
return getValue(Flags.FLAG_ENABLE_AUTO_TASK_STACK_CONTROLLER,
FeatureFlags::enableAutoTaskStackController);
}
@Override
public boolean enableAppPairs() {
return getValue(Flags.FLAG_ENABLE_APP_PAIRS,
FeatureFlags::enableAppPairs);
}
@Override
public boolean enableBubbleAnything() {
return getValue(Flags.FLAG_ENABLE_BUBBLE_ANYTHING,
FeatureFlags::enableBubbleAnything);
FeatureFlags::enableBubbleAnything);
}
@Override
public boolean enableBubbleAppCompatFixes() {
return getValue(Flags.FLAG_ENABLE_BUBBLE_APP_COMPAT_FIXES,
FeatureFlags::enableBubbleAppCompatFixes);
}
@Override
public boolean enableBubbleBar() {
return getValue(Flags.FLAG_ENABLE_BUBBLE_BAR,
FeatureFlags::enableBubbleBar);
FeatureFlags::enableBubbleBar);
}
@Override
public boolean enableBubbleBarOnPhones() {
return getValue(Flags.FLAG_ENABLE_BUBBLE_BAR_ON_PHONES,
FeatureFlags::enableBubbleBarOnPhones);
}
@Override
public boolean enableBubbleStashing() {
return getValue(Flags.FLAG_ENABLE_BUBBLE_STASHING,
FeatureFlags::enableBubbleStashing);
FeatureFlags::enableBubbleStashing);
}
@Override
public boolean enableBubbleSwipeUpCleanup() {
return getValue(Flags.FLAG_ENABLE_BUBBLE_SWIPE_UP_CLEANUP,
FeatureFlags::enableBubbleSwipeUpCleanup);
}
@Override
public boolean enableBubbleTaskViewListener() {
return getValue(Flags.FLAG_ENABLE_BUBBLE_TASK_VIEW_LISTENER,
FeatureFlags::enableBubbleTaskViewListener);
}
@Override
public boolean enableBubbleToFullscreen() {
return getValue(Flags.FLAG_ENABLE_BUBBLE_TO_FULLSCREEN,
FeatureFlags::enableBubbleToFullscreen);
}
@Override
public boolean enableBubblesLongPressNavHandle() {
return getValue(Flags.FLAG_ENABLE_BUBBLES_LONG_PRESS_NAV_HANDLE,
FeatureFlags::enableBubblesLongPressNavHandle);
FeatureFlags::enableBubblesLongPressNavHandle);
}
@Override
public boolean enableLeftRightSplitInPortrait() {
return getValue(Flags.FLAG_ENABLE_LEFT_RIGHT_SPLIT_IN_PORTRAIT,
FeatureFlags::enableLeftRightSplitInPortrait);
public boolean enableCreateAnyBubble() {
return getValue(Flags.FLAG_ENABLE_CREATE_ANY_BUBBLE,
FeatureFlags::enableCreateAnyBubble);
}
@Override
public boolean enableDynamicInsetsForAppLaunch() {
return getValue(Flags.FLAG_ENABLE_DYNAMIC_INSETS_FOR_APP_LAUNCH,
FeatureFlags::enableDynamicInsetsForAppLaunch);
}
@Override
public boolean enableEnterSplitRemoveBubble() {
return getValue(Flags.FLAG_ENABLE_ENTER_SPLIT_REMOVE_BUBBLE,
FeatureFlags::enableEnterSplitRemoveBubble);
}
@Override
public boolean enableFlexibleSplit() {
return getValue(Flags.FLAG_ENABLE_FLEXIBLE_SPLIT,
FeatureFlags::enableFlexibleSplit);
}
@Override
public boolean enableFlexibleTwoAppSplit() {
return getValue(Flags.FLAG_ENABLE_FLEXIBLE_TWO_APP_SPLIT,
FeatureFlags::enableFlexibleTwoAppSplit);
}
@Override
public boolean enableGsf() {
return getValue(Flags.FLAG_ENABLE_GSF,
FeatureFlags::enableGsf);
}
@Override
public boolean enableMagneticSplitDivider() {
return getValue(Flags.FLAG_ENABLE_MAGNETIC_SPLIT_DIVIDER,
FeatureFlags::enableMagneticSplitDivider);
}
@Override
public boolean enableNewBubbleAnimations() {
return getValue(Flags.FLAG_ENABLE_NEW_BUBBLE_ANIMATIONS,
FeatureFlags::enableNewBubbleAnimations);
FeatureFlags::enableNewBubbleAnimations);
}
@Override
public boolean enableOptionalBubbleOverflow() {
return getValue(Flags.FLAG_ENABLE_OPTIONAL_BUBBLE_OVERFLOW,
FeatureFlags::enableOptionalBubbleOverflow);
FeatureFlags::enableOptionalBubbleOverflow);
}
@Override
public boolean enablePip2Implementation() {
return getValue(Flags.FLAG_ENABLE_PIP2_IMPLEMENTATION,
FeatureFlags::enablePip2Implementation);
public boolean enablePip2() {
return getValue(Flags.FLAG_ENABLE_PIP2,
FeatureFlags::enablePip2);
}
@Override
public boolean enablePipBoxShadows() {
return getValue(Flags.FLAG_ENABLE_PIP_BOX_SHADOWS,
FeatureFlags::enablePipBoxShadows);
}
@Override
public boolean enablePipUmoExperience() {
return getValue(Flags.FLAG_ENABLE_PIP_UMO_EXPERIENCE,
FeatureFlags::enablePipUmoExperience);
FeatureFlags::enablePipUmoExperience);
}
@Override
public boolean enableRecentsBookendTransition() {
return getValue(Flags.FLAG_ENABLE_RECENTS_BOOKEND_TRANSITION,
FeatureFlags::enableRecentsBookendTransition);
}
@Override
public boolean enableRetrievableBubbles() {
return getValue(Flags.FLAG_ENABLE_RETRIEVABLE_BUBBLES,
FeatureFlags::enableRetrievableBubbles);
FeatureFlags::enableRetrievableBubbles);
}
@Override
public boolean enableSplitContextual() {
return getValue(Flags.FLAG_ENABLE_SPLIT_CONTEXTUAL,
FeatureFlags::enableSplitContextual);
public boolean enableShellTopTaskTracking() {
return getValue(Flags.FLAG_ENABLE_SHELL_TOP_TASK_TRACKING,
FeatureFlags::enableShellTopTaskTracking);
}
@Override
public boolean enableTaskbarNavbarUnification() {
return getValue(Flags.FLAG_ENABLE_TASKBAR_NAVBAR_UNIFICATION,
FeatureFlags::enableTaskbarNavbarUnification);
FeatureFlags::enableTaskbarNavbarUnification);
}
@Override
public boolean enableTaskbarOnPhones() {
return getValue(Flags.FLAG_ENABLE_TASKBAR_ON_PHONES,
FeatureFlags::enableTaskbarOnPhones);
}
@Override
public boolean enableTinyTaskbar() {
return getValue(Flags.FLAG_ENABLE_TINY_TASKBAR,
FeatureFlags::enableTinyTaskbar);
FeatureFlags::enableTinyTaskbar);
}
@Override
public boolean fixMissingUserChangeCallbacks() {
return getValue(Flags.FLAG_FIX_MISSING_USER_CHANGE_CALLBACKS,
FeatureFlags::fixMissingUserChangeCallbacks);
}
@Override
public boolean onlyReuseBubbledTaskWhenLaunchedFromBubble() {
return getValue(Flags.FLAG_ONLY_REUSE_BUBBLED_TASK_WHEN_LAUNCHED_FROM_BUBBLE,
FeatureFlags::onlyReuseBubbledTaskWhenLaunchedFromBubble);
FeatureFlags::onlyReuseBubbledTaskWhenLaunchedFromBubble);
}
@Override
public boolean taskViewRepository() {
return getValue(Flags.FLAG_TASK_VIEW_REPOSITORY,
FeatureFlags::taskViewRepository);
}
@Override
public boolean taskViewTransitionsRefactor() {
return getValue(Flags.FLAG_TASK_VIEW_TRANSITIONS_REFACTOR,
FeatureFlags::taskViewTransitionsRefactor);
}
public boolean isFlagReadOnlyOptimized(String flagName) {
if (mReadOnlyFlagsSet.contains(flagName) &&
isOptimizationEnabled()) {
return true;
isOptimizationEnabled()) {
return true;
}
return false;
}
private boolean isOptimizationEnabled() {
return false;
}
@@ -146,29 +258,76 @@ public class CustomFeatureFlags implements FeatureFlags {
public List<String> getFlagNames() {
return Arrays.asList(
Flags.FLAG_ANIMATE_BUBBLE_SIZE_CHANGE,
Flags.FLAG_ENABLE_APP_PAIRS,
Flags.FLAG_ENABLE_BUBBLE_ANYTHING,
Flags.FLAG_ENABLE_BUBBLE_BAR,
Flags.FLAG_ENABLE_BUBBLE_STASHING,
Flags.FLAG_ENABLE_BUBBLES_LONG_PRESS_NAV_HANDLE,
Flags.FLAG_ENABLE_LEFT_RIGHT_SPLIT_IN_PORTRAIT,
Flags.FLAG_ENABLE_NEW_BUBBLE_ANIMATIONS,
Flags.FLAG_ENABLE_OPTIONAL_BUBBLE_OVERFLOW,
Flags.FLAG_ENABLE_PIP2_IMPLEMENTATION,
Flags.FLAG_ENABLE_PIP_UMO_EXPERIENCE,
Flags.FLAG_ENABLE_RETRIEVABLE_BUBBLES,
Flags.FLAG_ENABLE_SPLIT_CONTEXTUAL,
Flags.FLAG_ENABLE_TASKBAR_NAVBAR_UNIFICATION,
Flags.FLAG_ENABLE_TINY_TASKBAR,
Flags.FLAG_ONLY_REUSE_BUBBLED_TASK_WHEN_LAUNCHED_FROM_BUBBLE
Flags.FLAG_ENABLE_AUTO_TASK_STACK_CONTROLLER,
Flags.FLAG_ENABLE_BUBBLE_ANYTHING,
Flags.FLAG_ENABLE_BUBBLE_APP_COMPAT_FIXES,
Flags.FLAG_ENABLE_BUBBLE_BAR,
Flags.FLAG_ENABLE_BUBBLE_BAR_ON_PHONES,
Flags.FLAG_ENABLE_BUBBLE_STASHING,
Flags.FLAG_ENABLE_BUBBLE_SWIPE_UP_CLEANUP,
Flags.FLAG_ENABLE_BUBBLE_TASK_VIEW_LISTENER,
Flags.FLAG_ENABLE_BUBBLE_TO_FULLSCREEN,
Flags.FLAG_ENABLE_BUBBLES_LONG_PRESS_NAV_HANDLE,
Flags.FLAG_ENABLE_CREATE_ANY_BUBBLE,
Flags.FLAG_ENABLE_DYNAMIC_INSETS_FOR_APP_LAUNCH,
Flags.FLAG_ENABLE_ENTER_SPLIT_REMOVE_BUBBLE,
Flags.FLAG_ENABLE_FLEXIBLE_SPLIT,
Flags.FLAG_ENABLE_FLEXIBLE_TWO_APP_SPLIT,
Flags.FLAG_ENABLE_GSF,
Flags.FLAG_ENABLE_MAGNETIC_SPLIT_DIVIDER,
Flags.FLAG_ENABLE_NEW_BUBBLE_ANIMATIONS,
Flags.FLAG_ENABLE_OPTIONAL_BUBBLE_OVERFLOW,
Flags.FLAG_ENABLE_PIP2,
Flags.FLAG_ENABLE_PIP_BOX_SHADOWS,
Flags.FLAG_ENABLE_PIP_UMO_EXPERIENCE,
Flags.FLAG_ENABLE_RECENTS_BOOKEND_TRANSITION,
Flags.FLAG_ENABLE_RETRIEVABLE_BUBBLES,
Flags.FLAG_ENABLE_SHELL_TOP_TASK_TRACKING,
Flags.FLAG_ENABLE_TASKBAR_NAVBAR_UNIFICATION,
Flags.FLAG_ENABLE_TASKBAR_ON_PHONES,
Flags.FLAG_ENABLE_TINY_TASKBAR,
Flags.FLAG_FIX_MISSING_USER_CHANGE_CALLBACKS,
Flags.FLAG_ONLY_REUSE_BUBBLED_TASK_WHEN_LAUNCHED_FROM_BUBBLE,
Flags.FLAG_TASK_VIEW_REPOSITORY,
Flags.FLAG_TASK_VIEW_TRANSITIONS_REFACTOR
);
}
private Set<String> mReadOnlyFlagsSet = new HashSet<>(
Arrays.asList(
Flags.FLAG_ENABLE_PIP2_IMPLEMENTATION,
""
)
Arrays.asList(
Flags.FLAG_ENABLE_AUTO_TASK_STACK_CONTROLLER,
Flags.FLAG_ENABLE_BUBBLE_ANYTHING,
Flags.FLAG_ENABLE_BUBBLE_APP_COMPAT_FIXES,
Flags.FLAG_ENABLE_BUBBLE_BAR,
Flags.FLAG_ENABLE_BUBBLE_BAR_ON_PHONES,
Flags.FLAG_ENABLE_BUBBLE_STASHING,
Flags.FLAG_ENABLE_BUBBLE_SWIPE_UP_CLEANUP,
Flags.FLAG_ENABLE_BUBBLE_TASK_VIEW_LISTENER,
Flags.FLAG_ENABLE_BUBBLE_TO_FULLSCREEN,
Flags.FLAG_ENABLE_BUBBLES_LONG_PRESS_NAV_HANDLE,
Flags.FLAG_ENABLE_CREATE_ANY_BUBBLE,
Flags.FLAG_ENABLE_DYNAMIC_INSETS_FOR_APP_LAUNCH,
Flags.FLAG_ENABLE_ENTER_SPLIT_REMOVE_BUBBLE,
Flags.FLAG_ENABLE_FLEXIBLE_SPLIT,
Flags.FLAG_ENABLE_FLEXIBLE_TWO_APP_SPLIT,
Flags.FLAG_ENABLE_GSF,
Flags.FLAG_ENABLE_MAGNETIC_SPLIT_DIVIDER,
Flags.FLAG_ENABLE_NEW_BUBBLE_ANIMATIONS,
Flags.FLAG_ENABLE_OPTIONAL_BUBBLE_OVERFLOW,
Flags.FLAG_ENABLE_PIP2,
Flags.FLAG_ENABLE_PIP_BOX_SHADOWS,
Flags.FLAG_ENABLE_PIP_UMO_EXPERIENCE,
Flags.FLAG_ENABLE_RECENTS_BOOKEND_TRANSITION,
Flags.FLAG_ENABLE_RETRIEVABLE_BUBBLES,
Flags.FLAG_ENABLE_SHELL_TOP_TASK_TRACKING,
Flags.FLAG_ENABLE_TASKBAR_NAVBAR_UNIFICATION,
Flags.FLAG_ENABLE_TASKBAR_ON_PHONES,
Flags.FLAG_ENABLE_TINY_TASKBAR,
Flags.FLAG_FIX_MISSING_USER_CHANGE_CALLBACKS,
Flags.FLAG_ONLY_REUSE_BUBBLED_TASK_WHEN_LAUNCHED_FROM_BUBBLE,
Flags.FLAG_TASK_VIEW_REPOSITORY,
Flags.FLAG_TASK_VIEW_TRANSITIONS_REFACTOR,
""
)
);
}
@@ -3,7 +3,6 @@ package com.android.wm.shell;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Predicate;
/** @hide */
public class FakeFeatureFlagsImpl extends CustomFeatureFlags {
private final Map<String, Boolean> mFlagMap = new HashMap<>();
+117 -36
View File
@@ -1,53 +1,134 @@
package com.android.wm.shell;
// TODO(b/303773055): Remove the annotation after access issue is resolved.
/** @hide */
public interface FeatureFlags {
boolean animateBubbleSizeChange();
boolean enableAppPairs();
boolean enableAutoTaskStackController();
boolean enableBubbleAnything();
boolean enableBubbleAppCompatFixes();
boolean enableBubbleBar();
boolean enableBubbleBarOnPhones();
boolean enableBubbleStashing();
boolean enableBubbleSwipeUpCleanup();
boolean enableBubbleTaskViewListener();
boolean enableBubbleToFullscreen();
boolean enableBubblesLongPressNavHandle();
boolean enableLeftRightSplitInPortrait();
boolean enableCreateAnyBubble();
boolean enableDynamicInsetsForAppLaunch();
boolean enableEnterSplitRemoveBubble();
boolean enableFlexibleSplit();
boolean enableFlexibleTwoAppSplit();
boolean enableGsf();
boolean enableMagneticSplitDivider();
boolean enableNewBubbleAnimations();
boolean enableOptionalBubbleOverflow();
boolean enablePip2Implementation();
boolean enablePip2();
boolean enablePipBoxShadows();
boolean enablePipUmoExperience();
boolean enableRecentsBookendTransition();
boolean enableRetrievableBubbles();
boolean enableSplitContextual();
boolean enableShellTopTaskTracking();
boolean enableTaskbarNavbarUnification();
boolean enableTaskbarOnPhones();
boolean enableTinyTaskbar();
boolean fixMissingUserChangeCallbacks();
boolean onlyReuseBubbledTaskWhenLaunchedFromBubble();
boolean taskViewRepository();
boolean taskViewTransitionsRefactor();
}
@@ -1,394 +1,229 @@
package com.android.wm.shell;
// TODO(b/303773055): Remove the annotation after access issue is resolved.
import com.android.quickstep.util.DeviceConfigHelper;
import java.nio.file.Files;
import java.nio.file.Paths;
/** @hide */
public final class FeatureFlagsImpl implements FeatureFlags {
private static final boolean isReadFromNew = Files.exists(Paths.get("/metadata/aconfig/boot/enable_only_new_storage"));
private static volatile boolean isCached = false;
private static volatile boolean multitasking_is_cached = false;
private static boolean animateBubbleSizeChange = false;
private static boolean enableAppPairs = true;
private static boolean enableBubbleAnything = false;
private static boolean enableBubbleBar = false;
private static boolean enableBubbleStashing = false;
private static boolean enableBubblesLongPressNavHandle = false;
private static boolean enableLeftRightSplitInPortrait = true;
private static boolean enableNewBubbleAnimations = false;
private static boolean enableOptionalBubbleOverflow = true;
private static boolean enablePipUmoExperience = false;
private static boolean enableRetrievableBubbles = false;
private static boolean enableSplitContextual = true;
private static boolean enableTaskbarNavbarUnification = true;
private static boolean enableTinyTaskbar = false;
private static boolean onlyReuseBubbledTaskWhenLaunchedFromBubble = false;
private void init() {
boolean foundPackage = true;
animateBubbleSizeChange = foundPackage;
enableAppPairs = foundPackage;
enableBubbleAnything = foundPackage;
enableBubbleBar = foundPackage;
enableBubbleStashing = foundPackage;
enableBubblesLongPressNavHandle = foundPackage ;
enableLeftRightSplitInPortrait = foundPackage;
enableNewBubbleAnimations = foundPackage;
enableOptionalBubbleOverflow = foundPackage;
enablePipUmoExperience = foundPackage;
enableRetrievableBubbles = foundPackage;
enableSplitContextual = foundPackage;
enableTaskbarNavbarUnification = foundPackage;
enableTinyTaskbar = foundPackage;
onlyReuseBubbledTaskWhenLaunchedFromBubble = foundPackage ;
isCached = true;
}
private void load_overrides_multitasking() {
try {
var properties = DeviceConfigHelper.Companion.getPrefs();
animateBubbleSizeChange =
properties.getBoolean(Flags.FLAG_ANIMATE_BUBBLE_SIZE_CHANGE, false);
enableAppPairs =
properties.getBoolean(Flags.FLAG_ENABLE_APP_PAIRS, true);
enableBubbleAnything =
properties.getBoolean(Flags.FLAG_ENABLE_BUBBLE_ANYTHING, false);
enableBubbleBar =
properties.getBoolean(Flags.FLAG_ENABLE_BUBBLE_BAR, false);
enableBubbleStashing =
properties.getBoolean(Flags.FLAG_ENABLE_BUBBLE_STASHING, false);
enableBubblesLongPressNavHandle =
properties.getBoolean(Flags.FLAG_ENABLE_BUBBLES_LONG_PRESS_NAV_HANDLE, false);
enableLeftRightSplitInPortrait =
properties.getBoolean(Flags.FLAG_ENABLE_LEFT_RIGHT_SPLIT_IN_PORTRAIT, true);
enableNewBubbleAnimations =
properties.getBoolean(Flags.FLAG_ENABLE_NEW_BUBBLE_ANIMATIONS, false);
enableOptionalBubbleOverflow =
properties.getBoolean(Flags.FLAG_ENABLE_OPTIONAL_BUBBLE_OVERFLOW, true);
enablePipUmoExperience =
properties.getBoolean(Flags.FLAG_ENABLE_PIP_UMO_EXPERIENCE, false);
enableRetrievableBubbles =
properties.getBoolean(Flags.FLAG_ENABLE_RETRIEVABLE_BUBBLES, false);
enableSplitContextual =
properties.getBoolean(Flags.FLAG_ENABLE_SPLIT_CONTEXTUAL, true);
enableTaskbarNavbarUnification =
properties.getBoolean(Flags.FLAG_ENABLE_TASKBAR_NAVBAR_UNIFICATION, true);
enableTinyTaskbar =
properties.getBoolean(Flags.FLAG_ENABLE_TINY_TASKBAR, false);
onlyReuseBubbledTaskWhenLaunchedFromBubble =
properties.getBoolean(Flags.FLAG_ONLY_REUSE_BUBBLED_TASK_WHEN_LAUNCHED_FROM_BUBBLE, false);
} catch (NullPointerException e) {
throw new RuntimeException(
"Cannot read value from namespace multitasking "
+ "from DeviceConfig. It could be that the code using flag "
+ "executed before SettingsProvider initialization. Please use "
+ "fixed read-only flag by adding is_fixed_read_only: true in "
+ "flag declaration.",
e
);
}
multitasking_is_cached = true;
}
@Override
public boolean animateBubbleSizeChange() {
if (isReadFromNew) {
if (!isCached) {
init();
}
} else {
if (!multitasking_is_cached) {
load_overrides_multitasking();
}
}
return animateBubbleSizeChange;
}
@Override
public boolean enableAppPairs() {
if (isReadFromNew) {
if (!isCached) {
init();
}
} else {
if (!multitasking_is_cached) {
load_overrides_multitasking();
}
}
return enableAppPairs;
}
@Override
public boolean enableBubbleAnything() {
if (isReadFromNew) {
if (!isCached) {
init();
}
} else {
if (!multitasking_is_cached) {
load_overrides_multitasking();
}
}
return enableBubbleAnything;
}
@Override
public boolean enableBubbleBar() {
if (isReadFromNew) {
if (!isCached) {
init();
}
} else {
if (!multitasking_is_cached) {
load_overrides_multitasking();
}
}
return enableBubbleBar;
}
@Override
public boolean enableBubbleStashing() {
if (isReadFromNew) {
if (!isCached) {
init();
}
} else {
if (!multitasking_is_cached) {
load_overrides_multitasking();
}
}
return enableBubbleStashing;
}
@Override
public boolean enableBubblesLongPressNavHandle() {
if (isReadFromNew) {
if (!isCached) {
init();
}
} else {
if (!multitasking_is_cached) {
load_overrides_multitasking();
}
}
return enableBubblesLongPressNavHandle;
}
@Override
public boolean enableLeftRightSplitInPortrait() {
if (isReadFromNew) {
if (!isCached) {
init();
}
} else {
if (!multitasking_is_cached) {
load_overrides_multitasking();
}
}
return enableLeftRightSplitInPortrait;
}
@Override
public boolean enableNewBubbleAnimations() {
if (isReadFromNew) {
if (!isCached) {
init();
}
} else {
if (!multitasking_is_cached) {
load_overrides_multitasking();
}
}
return enableNewBubbleAnimations;
}
@Override
public boolean enableOptionalBubbleOverflow() {
if (isReadFromNew) {
if (!isCached) {
init();
}
} else {
if (!multitasking_is_cached) {
load_overrides_multitasking();
}
}
return enableOptionalBubbleOverflow;
}
@Override
public boolean enablePip2Implementation() {
public boolean enableAutoTaskStackController() {
return false;
}
@Override
public boolean enableBubbleAnything() {
return false;
}
@Override
public boolean enableBubbleAppCompatFixes() {
return true;
}
@Override
public boolean enableBubbleBar() {
return false;
}
@Override
public boolean enableBubbleBarOnPhones() {
return false;
}
@Override
public boolean enableBubbleStashing() {
return false;
}
@Override
public boolean enableBubbleSwipeUpCleanup() {
return true;
}
@Override
public boolean enableBubbleTaskViewListener() {
return false;
}
@Override
public boolean enableBubbleToFullscreen() {
return false;
}
@Override
public boolean enableBubblesLongPressNavHandle() {
return false;
}
@Override
public boolean enableCreateAnyBubble() {
return false;
}
@Override
public boolean enableDynamicInsetsForAppLaunch() {
return true;
}
@Override
public boolean enableEnterSplitRemoveBubble() {
return false;
}
@Override
public boolean enableFlexibleSplit() {
return false;
}
@Override
public boolean enableFlexibleTwoAppSplit() {
return false;
}
@Override
public boolean enableGsf() {
return true;
}
@Override
public boolean enableMagneticSplitDivider() {
return false;
}
@Override
public boolean enableNewBubbleAnimations() {
return false;
}
@Override
public boolean enableOptionalBubbleOverflow() {
return false;
}
@Override
public boolean enablePip2() {
return false;
}
@Override
public boolean enablePipBoxShadows() {
return false;
}
@Override
public boolean enablePipUmoExperience() {
if (isReadFromNew) {
if (!isCached) {
init();
}
} else {
if (!multitasking_is_cached) {
load_overrides_multitasking();
}
}
return enablePipUmoExperience;
return false;
}
@Override
public boolean enableRecentsBookendTransition() {
return true;
}
@Override
public boolean enableRetrievableBubbles() {
if (isReadFromNew) {
if (!isCached) {
init();
}
} else {
if (!multitasking_is_cached) {
load_overrides_multitasking();
}
}
return enableRetrievableBubbles;
return false;
}
@Override
public boolean enableSplitContextual() {
if (isReadFromNew) {
if (!isCached) {
init();
}
} else {
if (!multitasking_is_cached) {
load_overrides_multitasking();
}
}
return enableSplitContextual;
public boolean enableShellTopTaskTracking() {
return false;
}
@Override
public boolean enableTaskbarNavbarUnification() {
if (isReadFromNew) {
if (!isCached) {
init();
}
} else {
if (!multitasking_is_cached) {
load_overrides_multitasking();
}
}
return enableTaskbarNavbarUnification;
return true;
}
@Override
public boolean enableTaskbarOnPhones() {
return true;
}
@Override
public boolean enableTinyTaskbar() {
if (isReadFromNew) {
if (!isCached) {
init();
}
} else {
if (!multitasking_is_cached) {
load_overrides_multitasking();
}
}
return enableTinyTaskbar;
return false;
}
@Override
public boolean onlyReuseBubbledTaskWhenLaunchedFromBubble() {
if (isReadFromNew) {
if (!isCached) {
init();
}
} else {
if (!multitasking_is_cached) {
load_overrides_multitasking();
}
}
return onlyReuseBubbledTaskWhenLaunchedFromBubble;
public boolean fixMissingUserChangeCallbacks() {
return true;
}
@Override
public boolean onlyReuseBubbledTaskWhenLaunchedFromBubble() {
return true;
}
@Override
public boolean taskViewRepository() {
return true;
}
@Override
public boolean taskViewTransitionsRefactor() {
return false;
}
}
+195 -49
View File
@@ -1,119 +1,265 @@
package com.android.wm.shell;
// TODO(b/303773055): Remove the annotation after access issue is resolved.
/** @hide */
public final class Flags {
/** @hide */
public static final String FLAG_ANIMATE_BUBBLE_SIZE_CHANGE = "com.android.wm.shell.animate_bubble_size_change";
/** @hide */
public static final String FLAG_ENABLE_APP_PAIRS = "com.android.wm.shell.enable_app_pairs";
public static final String FLAG_ENABLE_AUTO_TASK_STACK_CONTROLLER = "com.android.wm.shell.enable_auto_task_stack_controller";
/** @hide */
public static final String FLAG_ENABLE_BUBBLE_ANYTHING = "com.android.wm.shell.enable_bubble_anything";
/** @hide */
public static final String FLAG_ENABLE_BUBBLE_APP_COMPAT_FIXES = "com.android.wm.shell.enable_bubble_app_compat_fixes";
/** @hide */
public static final String FLAG_ENABLE_BUBBLE_BAR = "com.android.wm.shell.enable_bubble_bar";
/** @hide */
public static final String FLAG_ENABLE_BUBBLE_BAR_ON_PHONES = "com.android.wm.shell.enable_bubble_bar_on_phones";
/** @hide */
public static final String FLAG_ENABLE_BUBBLE_STASHING = "com.android.wm.shell.enable_bubble_stashing";
/** @hide */
public static final String FLAG_ENABLE_BUBBLE_SWIPE_UP_CLEANUP = "com.android.wm.shell.enable_bubble_swipe_up_cleanup";
/** @hide */
public static final String FLAG_ENABLE_BUBBLE_TASK_VIEW_LISTENER = "com.android.wm.shell.enable_bubble_task_view_listener";
/** @hide */
public static final String FLAG_ENABLE_BUBBLE_TO_FULLSCREEN = "com.android.wm.shell.enable_bubble_to_fullscreen";
/** @hide */
public static final String FLAG_ENABLE_BUBBLES_LONG_PRESS_NAV_HANDLE = "com.android.wm.shell.enable_bubbles_long_press_nav_handle";
/** @hide */
public static final String FLAG_ENABLE_LEFT_RIGHT_SPLIT_IN_PORTRAIT = "com.android.wm.shell.enable_left_right_split_in_portrait";
public static final String FLAG_ENABLE_CREATE_ANY_BUBBLE = "com.android.wm.shell.enable_create_any_bubble";
/** @hide */
public static final String FLAG_ENABLE_DYNAMIC_INSETS_FOR_APP_LAUNCH = "com.android.wm.shell.enable_dynamic_insets_for_app_launch";
/** @hide */
public static final String FLAG_ENABLE_ENTER_SPLIT_REMOVE_BUBBLE = "com.android.wm.shell.enable_enter_split_remove_bubble";
/** @hide */
public static final String FLAG_ENABLE_FLEXIBLE_SPLIT = "com.android.wm.shell.enable_flexible_split";
/** @hide */
public static final String FLAG_ENABLE_FLEXIBLE_TWO_APP_SPLIT = "com.android.wm.shell.enable_flexible_two_app_split";
/** @hide */
public static final String FLAG_ENABLE_GSF = "com.android.wm.shell.enable_gsf";
/** @hide */
public static final String FLAG_ENABLE_MAGNETIC_SPLIT_DIVIDER = "com.android.wm.shell.enable_magnetic_split_divider";
/** @hide */
public static final String FLAG_ENABLE_NEW_BUBBLE_ANIMATIONS = "com.android.wm.shell.enable_new_bubble_animations";
/** @hide */
public static final String FLAG_ENABLE_OPTIONAL_BUBBLE_OVERFLOW = "com.android.wm.shell.enable_optional_bubble_overflow";
/** @hide */
public static final String FLAG_ENABLE_PIP2_IMPLEMENTATION = "com.android.wm.shell.enable_pip2_implementation";
public static final String FLAG_ENABLE_PIP2 = "com.android.wm.shell.enable_pip2";
/** @hide */
public static final String FLAG_ENABLE_PIP_BOX_SHADOWS = "com.android.wm.shell.enable_pip_box_shadows";
/** @hide */
public static final String FLAG_ENABLE_PIP_UMO_EXPERIENCE = "com.android.wm.shell.enable_pip_umo_experience";
/** @hide */
public static final String FLAG_ENABLE_RECENTS_BOOKEND_TRANSITION = "com.android.wm.shell.enable_recents_bookend_transition";
/** @hide */
public static final String FLAG_ENABLE_RETRIEVABLE_BUBBLES = "com.android.wm.shell.enable_retrievable_bubbles";
/** @hide */
public static final String FLAG_ENABLE_SPLIT_CONTEXTUAL = "com.android.wm.shell.enable_split_contextual";
public static final String FLAG_ENABLE_SHELL_TOP_TASK_TRACKING = "com.android.wm.shell.enable_shell_top_task_tracking";
/** @hide */
public static final String FLAG_ENABLE_TASKBAR_NAVBAR_UNIFICATION = "com.android.wm.shell.enable_taskbar_navbar_unification";
/** @hide */
public static final String FLAG_ENABLE_TASKBAR_ON_PHONES = "com.android.wm.shell.enable_taskbar_on_phones";
/** @hide */
public static final String FLAG_ENABLE_TINY_TASKBAR = "com.android.wm.shell.enable_tiny_taskbar";
/** @hide */
public static final String FLAG_FIX_MISSING_USER_CHANGE_CALLBACKS = "com.android.wm.shell.fix_missing_user_change_callbacks";
/** @hide */
public static final String FLAG_ONLY_REUSE_BUBBLED_TASK_WHEN_LAUNCHED_FROM_BUBBLE = "com.android.wm.shell.only_reuse_bubbled_task_when_launched_from_bubble";
public static boolean animateBubbleSizeChange() {
return FEATURE_FLAGS.animateBubbleSizeChange();
/** @hide */
public static final String FLAG_TASK_VIEW_REPOSITORY = "com.android.wm.shell.task_view_repository";
/** @hide */
public static final String FLAG_TASK_VIEW_TRANSITIONS_REFACTOR = "com.android.wm.shell.task_view_transitions_refactor";
public static boolean enableAutoTaskStackController() {
return FEATURE_FLAGS.enableAutoTaskStackController();
}
public static boolean enableAppPairs() {
return FEATURE_FLAGS.enableAppPairs();
}
public static boolean enableBubbleAnything() {
return FEATURE_FLAGS.enableBubbleAnything();
}
public static boolean enableBubbleAppCompatFixes() {
return FEATURE_FLAGS.enableBubbleAppCompatFixes();
}
public static boolean enableBubbleBar() {
return FEATURE_FLAGS.enableBubbleBar();
}
public static boolean enableBubbleBarOnPhones() {
return FEATURE_FLAGS.enableBubbleBarOnPhones();
}
public static boolean enableBubbleStashing() {
return FEATURE_FLAGS.enableBubbleStashing();
}
public static boolean enableBubbleSwipeUpCleanup() {
return FEATURE_FLAGS.enableBubbleSwipeUpCleanup();
}
public static boolean enableBubbleTaskViewListener() {
return FEATURE_FLAGS.enableBubbleTaskViewListener();
}
public static boolean enableBubbleToFullscreen() {
return FEATURE_FLAGS.enableBubbleToFullscreen();
}
public static boolean enableBubblesLongPressNavHandle() {
return FEATURE_FLAGS.enableBubblesLongPressNavHandle();
}
public static boolean enableLeftRightSplitInPortrait() {
return FEATURE_FLAGS.enableLeftRightSplitInPortrait();
public static boolean enableCreateAnyBubble() {
return FEATURE_FLAGS.enableCreateAnyBubble();
}
public static boolean enableDynamicInsetsForAppLaunch() {
return FEATURE_FLAGS.enableDynamicInsetsForAppLaunch();
}
public static boolean enableEnterSplitRemoveBubble() {
return FEATURE_FLAGS.enableEnterSplitRemoveBubble();
}
public static boolean enableFlexibleSplit() {
return FEATURE_FLAGS.enableFlexibleSplit();
}
public static boolean enableFlexibleTwoAppSplit() {
return FEATURE_FLAGS.enableFlexibleTwoAppSplit();
}
public static boolean enableGsf() {
return FEATURE_FLAGS.enableGsf();
}
public static boolean enableMagneticSplitDivider() {
return FEATURE_FLAGS.enableMagneticSplitDivider();
}
public static boolean enableNewBubbleAnimations() {
return FEATURE_FLAGS.enableNewBubbleAnimations();
}
public static boolean enableOptionalBubbleOverflow() {
return FEATURE_FLAGS.enableOptionalBubbleOverflow();
}
public static boolean enablePip2Implementation() {
return FEATURE_FLAGS.enablePip2Implementation();
public static boolean enablePip2() {
return FEATURE_FLAGS.enablePip2();
}
public static boolean enablePipBoxShadows() {
return FEATURE_FLAGS.enablePipBoxShadows();
}
public static boolean enablePipUmoExperience() {
return FEATURE_FLAGS.enablePipUmoExperience();
}
public static boolean enableRecentsBookendTransition() {
return FEATURE_FLAGS.enableRecentsBookendTransition();
}
public static boolean enableRetrievableBubbles() {
return FEATURE_FLAGS.enableRetrievableBubbles();
}
public static boolean enableSplitContextual() {
return FEATURE_FLAGS.enableSplitContextual();
public static boolean enableShellTopTaskTracking() {
return FEATURE_FLAGS.enableShellTopTaskTracking();
}
public static boolean enableTaskbarNavbarUnification() {
return FEATURE_FLAGS.enableTaskbarNavbarUnification();
}
public static boolean enableTaskbarOnPhones() {
return FEATURE_FLAGS.enableTaskbarOnPhones();
}
public static boolean enableTinyTaskbar() {
return FEATURE_FLAGS.enableTinyTaskbar();
}
public static boolean fixMissingUserChangeCallbacks() {
return FEATURE_FLAGS.fixMissingUserChangeCallbacks();
}
public static boolean onlyReuseBubbledTaskWhenLaunchedFromBubble() {
return FEATURE_FLAGS.onlyReuseBubbledTaskWhenLaunchedFromBubble();
}
public static boolean taskViewRepository() {
return FEATURE_FLAGS.taskViewRepository();
}
public static boolean taskViewTransitionsRefactor() {
return FEATURE_FLAGS.taskViewTransitionsRefactor();
}
private static FeatureFlags FEATURE_FLAGS = new FeatureFlagsImpl();
}
+1
View File
@@ -56,6 +56,7 @@
android:enabled="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.intent.action.ALL_APPS" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.MONKEY"/>
+3 -3
View File
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_share_drop_target_label" msgid="5804774105974539508">"Deel program"</string>
<string name="app_share_drop_target_label" msgid="5804774105974539508">"Deel app"</string>
<string name="action_listen" msgid="2370304050784689486">"Luister"</string>
<string name="action_translate" msgid="8028378961867277746">"Vertaal"</string>
<string name="action_search" msgid="6269564710943755464">"Lens"</string>
@@ -9,12 +9,12 @@
<string name="dialog_cancel" msgid="6464336969134856366">"KANSELLEER"</string>
<string name="dialog_settings" msgid="6564397136021186148">"INSTELLINGS"</string>
<string name="niu_actions_confirmation_title" msgid="3863451714863526143">"Vertaal of luister na teks op skerm"</string>
<string name="niu_actions_confirmation_text" msgid="2105271481950866089">"Inligting soos teks op jou skerm, webadresse en skermskote kan met Google gedeel word.\n\nGaan na "<b>"Instellings &gt; Programme &gt; Verstekprogramme &gt; Digitale Assistent-program"</b>" om te verander watter inligting jy deel."</string>
<string name="niu_actions_confirmation_text" msgid="2105271481950866089">"Inligting soos teks op jou skerm, webadresse en skermskote kan met Google gedeel word.\n\nGaan na "<b>"Instellings &gt; Apps &gt; Verstekapps &gt; Digitale Assistent-app"</b>" om te verander watter inligting jy deel."</string>
<string name="assistant_not_selected_title" msgid="5017072974603345228">"Kies \'n assistent om hierdie kenmerk te gebruik"</string>
<string name="assistant_not_selected_text" msgid="3244613673884359276">"Kies \'n digitalebystandprogram in Instellings om na teks op jou skerm te luister of dit te vertaal"</string>
<string name="assistant_not_supported_title" msgid="1675788067597484142">"Verander jou assistent om hierdie kenmerk te gebruik"</string>
<string name="assistant_not_supported_text" msgid="1708031078549268884">"Verander jou digitalebystandprogram in Instellings om na teks op jou skerm te luister of dit te vertaal"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Tik hier om na teks op hierdie skerm te luister"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Tik hier om teks op hierdie skerm te vertaal"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"Hierdie program kan nie gedeel word nie"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"Hierdie app kan nie gedeel word nie"</string>
</resources>
+1 -1
View File
@@ -4,7 +4,7 @@
<string name="app_share_drop_target_label" msgid="5804774105974539508">"Абагуліць праграму"</string>
<string name="action_listen" msgid="2370304050784689486">"Праслухаць"</string>
<string name="action_translate" msgid="8028378961867277746">"Перакласці"</string>
<string name="action_search" msgid="6269564710943755464">"Аб\'ектыў"</string>
<string name="action_search" msgid="6269564710943755464">"Аб’ектыў"</string>
<string name="dialog_acknowledge" msgid="2804025517675853172">"ЗРАЗУМЕЛА"</string>
<string name="dialog_cancel" msgid="6464336969134856366">"СКАСАВАЦЬ"</string>
<string name="dialog_settings" msgid="6564397136021186148">"НАЛАДЫ"</string>
+1 -1
View File
@@ -5,7 +5,7 @@
<string name="action_listen" msgid="2370304050784689486">"گوش دادن"</string>
<string name="action_translate" msgid="8028378961867277746">"ترجمه"</string>
<string name="action_search" msgid="6269564710943755464">"لنز"</string>
<string name="dialog_acknowledge" msgid="2804025517675853172">"متوجه‌ام"</string>
<string name="dialog_acknowledge" msgid="2804025517675853172">"متوجهم"</string>
<string name="dialog_cancel" msgid="6464336969134856366">"لغو"</string>
<string name="dialog_settings" msgid="6564397136021186148">"تنظیمات"</string>
<string name="niu_actions_confirmation_title" msgid="3863451714863526143">"ترجمه نوشتار روی صفحه‌نمایش یا گوش دادن به آن"</string>
+2 -2
View File
@@ -14,7 +14,7 @@
<string name="assistant_not_selected_text" msgid="3244613673884359276">"כדי להאזין לטקסט שבמסך או לתרגם אותו, צריך לבחור אפליקציית עוזר דיגיטלי ב\'הגדרות\'"</string>
<string name="assistant_not_supported_title" msgid="1675788067597484142">"צריך לשנות את העוזר הדיגיטלי כדי להשתמש בתכונה הזו"</string>
<string name="assistant_not_supported_text" msgid="1708031078549268884">"כדי להאזין לטקסט שבמסך או לתרגם אותו, צריך לשנות את אפליקציית העוזר הדיגיטלי ב\'הגדרות\'"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"צריך להקיש כאן כדי להאזין לטקסט שבמסך הזה"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"צריך להקיש כאן כדי לתרגם את הטקסט שבמסך הזה"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"צריך ללחוץ כאן כדי להאזין לטקסט שבמסך הזה"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"צריך ללחוץ כאן כדי לתרגם את הטקסט שבמסך הזה"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"אי אפשר לשתף את האפליקציה הזו"</string>
</resources>
+3 -3
View File
@@ -9,11 +9,11 @@
<string name="dialog_cancel" msgid="6464336969134856366">"रद्द गर्नुहोस्"</string>
<string name="dialog_settings" msgid="6564397136021186148">"सेटिङ"</string>
<string name="niu_actions_confirmation_title" msgid="3863451714863526143">"स्क्रिनमा देखिने पाठ अनुवाद गर्नुहोस् वा पढेर सुनाउनुहोस्"</string>
<string name="niu_actions_confirmation_text" msgid="2105271481950866089">"तपाईंको स्क्रिनमा देखिने पाठ, वेब ठेगाना र स्क्रिनसटलगायतका जानकारी Google सँग सेयर गर्न सकिन्छ।\n\nकुन कुन जानकारी सेयर गर्न दिने भन्ने सेटिङ बदल्न "<b>"सेटिङ &gt; एप &gt; डिफल्ट एप &gt; डिजिटल सहायक एप"</b>" मा जानुहोस्।"</string>
<string name="niu_actions_confirmation_text" msgid="2105271481950866089">"तपाईंको स्क्रिनमा देखिने पाठ, वेब ठेगाना र स्क्रिनसटलगायतका जानकारी Google सँग सेयर गर्न सकिन्छ।\n\nकुन कुन जानकारी सेयर गर्न दिने भन्ने सेटिङ बदल्न "<b>"सेटिङ &gt; एप &gt; डिफल्ट एप &gt; डिजिटल एसिस्टेन्ट एप"</b>" मा जानुहोस्।"</string>
<string name="assistant_not_selected_title" msgid="5017072974603345228">"तपाईं यो सुविधा चलाउन चाहनुहुन्छ भने कुनै सहायक छनौट गर्नुहोस्"</string>
<string name="assistant_not_selected_text" msgid="3244613673884359276">"तपाईं आफ्नो स्क्रिनमा देखिने पाठ सुन्न वा अनुवाद गर्न चाहनुहुन्छ भने सेटिङमा गई कुनै डिजिटल सहायक एप छनौट गर्नुहोस्"</string>
<string name="assistant_not_selected_text" msgid="3244613673884359276">"तपाईं आफ्नो स्क्रिनमा देखिने पाठ सुन्न वा अनुवाद गर्न चाहनुहुन्छ भने सेटिङमा गई कुनै डिजिटल एसिस्टेन्ट एप छनौट गर्नुहोस्"</string>
<string name="assistant_not_supported_title" msgid="1675788067597484142">"तपाईं यो सुविधा चलाउन चाहनुहुन्छ भने आफ्नो सहायक परिवर्तन गर्नुहोस्"</string>
<string name="assistant_not_supported_text" msgid="1708031078549268884">"तपाईं आफ्नो स्क्रिनमा देखिने पाठ सुन्न वा अनुवाद गर्न चाहनुहुन्छ भने सेटिङमा गई कुनै डिजिटल सहायक एप परिर्वर्तन गर्नुहोस्"</string>
<string name="assistant_not_supported_text" msgid="1708031078549268884">"तपाईं आफ्नो स्क्रिनमा देखिने पाठ सुन्न वा अनुवाद गर्न चाहनुहुन्छ भने सेटिङमा गई कुनै डिजिटल एसिस्टेन्ट एप परिर्वर्तन गर्नुहोस्"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"तपाईं यो स्क्रिनमा देखिने पाठ सुन्न चाहनुहुन्छ यहाँ ट्याप गर्नुहोस्"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"तपाईं यो स्क्रिनमा देखिने पाठ अनुवाद गर्न चाहनुहुन्छ यहाँ ट्याप गर्नुहोस्"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"यो एप अरूलाई चलाउन दिन मिल्दैन"</string>
+1 -1
View File
@@ -16,7 +16,7 @@
-->
<resources>
<!-- App themes -->
<style name="LauncherTheme" parent="@style/BaseLauncherTheme">
<style name="LauncherTheme" parent="@style/DynamicColorsBaseLauncherTheme">
<item name="overviewButtonTextColor">@color/go_overview_text_color</item>
<item name="overviewButtonIconColor">@color/go_overview_text_color</item>
<item name="overviewButtonBackgroundColor">@color/go_overview_button_color</item>
@@ -37,12 +37,13 @@ import android.widget.Toast;
import androidx.core.content.FileProvider;
import com.android.internal.annotations.VisibleForTesting;
import com.android.launcher3.logging.StatsLogManager;
import com.android.launcher3.model.AppShareabilityChecker;
import com.android.launcher3.model.AppShareabilityJobService;
import com.android.launcher3.model.AppShareabilityManager;
import com.android.launcher3.model.AppShareabilityManager.ShareabilityStatus;
import com.android.launcher3.model.data.ItemInfo;
import com.android.launcher3.popup.PopupDataProvider;
import com.android.launcher3.popup.SystemShortcut;
import com.android.launcher3.views.ActivityContext;
@@ -114,17 +115,17 @@ public final class AppSharing {
* The Share App system shortcut, used to initiate p2p sharing of a given app
*/
public final class Share extends SystemShortcut<Launcher> {
private final PopupDataProvider mPopupDataProvider;
private final boolean mSharingEnabledForUser;
private final Set<View> mBoundViews = Collections.newSetFromMap(new WeakHashMap<>());
private boolean mIsEnabled = true;
private StatsLogManager mStatsLogManager;
public Share(Launcher target, ItemInfo itemInfo, View originalView) {
super(R.drawable.ic_share, R.string.app_share_drop_target_label, target, itemInfo,
originalView);
mPopupDataProvider = target.getPopupDataProvider();
mStatsLogManager = ActivityContext.lookupContext(originalView.getContext())
.getStatsLogManager();
mSharingEnabledForUser = bluetoothSharingEnabled(target);
if (!mSharingEnabledForUser) {
setEnabled(false);
@@ -150,8 +151,7 @@ public final class AppSharing {
@Override
public void onClick(View view) {
ActivityContext.lookupContext(view.getContext())
.getStatsLogManager().logger().log(LAUNCHER_SYSTEM_SHORTCUT_APP_SHARE_TAP);
mStatsLogManager.logger().log(LAUNCHER_SYSTEM_SHORTCUT_APP_SHARE_TAP);
if (!mIsEnabled) {
showCannotShareToast(view.getContext());
return;
@@ -240,6 +240,11 @@ public final class AppSharing {
public boolean isEnabled() {
return mIsEnabled;
}
@VisibleForTesting
void setStatsLogManager(StatsLogManager statsLogManager) {
mStatsLogManager = statsLogManager;
}
}
/**
@@ -26,11 +26,6 @@ public final class BuildConfig {
*/
public static final boolean QSB_ON_FIRST_SCREEN = true;
/**
* Flag to state if the widget on the top of the first screen should be shown.
*/
public static final boolean WIDGET_ON_FIRST_SCREEN = false;
/**
* Flag to control various developer centric features
*/
@@ -28,8 +28,8 @@ public class Launcher3QuickStepGo extends QuickstepLauncher {
private static final String TAG = "Launcher3QuickStepGo";
@Override
public Stream<SystemShortcut.Factory> getSupportedShortcuts() {
Stream<SystemShortcut.Factory> shortcuts = super.getSupportedShortcuts();
public Stream<SystemShortcut.Factory> getSupportedShortcuts(int container) {
Stream<SystemShortcut.Factory> shortcuts = super.getSupportedShortcuts(container);
if (AppSharing.ENABLE_APP_SHARING) {
shortcuts = Stream.concat(shortcuts, Stream.of(AppSharing.SHORTCUT_FACTORY));
@@ -31,6 +31,7 @@ import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.drawable.ColorDrawable;
@@ -47,6 +48,7 @@ import android.widget.Button;
import android.widget.TextView;
import androidx.annotation.IntDef;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import com.android.launcher3.BaseActivity;
@@ -56,9 +58,8 @@ import com.android.launcher3.views.ArrowTipView;
import com.android.quickstep.util.AssistContentRequester;
import com.android.quickstep.util.RecentsOrientedState;
import com.android.quickstep.views.GoOverviewActionsView;
import com.android.quickstep.views.TaskView.TaskContainer;
import com.android.quickstep.views.TaskContainer;
import com.android.systemui.shared.recents.model.Task;
import com.android.systemui.shared.recents.model.ThumbnailData;
import java.lang.annotation.Retention;
@@ -131,7 +132,7 @@ public final class TaskOverlayFactoryGo extends TaskOverlayFactory {
* Called when the current task is interactive for the user
*/
@Override
public void initOverlay(Task task, ThumbnailData thumbnail, Matrix matrix,
public void initOverlay(Task task, @Nullable Bitmap thumbnail, Matrix matrix,
boolean rotated) {
if (mDialog != null && mDialog.isShowing()) {
// Redraw the dialog in case the layout changed
@@ -148,8 +149,7 @@ public final class TaskOverlayFactoryGo extends TaskOverlayFactory {
// Disable Overview Actions for Work Profile apps
boolean isManagedProfileTask =
UserManager.get(mApplicationContext).isManagedProfile(task.key.userId);
boolean isAllowedByPolicy = mTaskContainer.getThumbnailViewDeprecated().isRealSnapshot()
&& !isManagedProfileTask;
boolean isAllowedByPolicy = isRealSnapshot() && !isManagedProfileTask;
getActionsView().setCallbacks(new OverlayUICallbacksGoImpl(isAllowedByPolicy, task));
mTaskPackageName = task.key.getPackageName();
mSharedPreferences = LauncherPrefs.getPrefs(mApplicationContext);
+2 -1
View File
@@ -4,13 +4,14 @@ android.defaults.buildfeatures.shaders=false
android.useAndroidX=true
android.enableHiddenApiCheck=false
android.hideApiWarning=false
# Improve build performance by enabling R8 parallelism.
android.r8.maxWorkers=4
kotlin.code.style=official
org.gradle.caching=true
org.gradle.jvmargs=-Xmx4g -Dfile.encoding=UTF-8 -XX:+UseParallelGC
org.gradle.jvmargs=-Xmx4g -XX:MaxMetaspaceSize=1g -Dfile.encoding=UTF-8 -XX:+UseParallelGC
org.gradle.parallel=true
org.gradle.configuration-cache=true
org.gradle.configuration-cache.parallel=true
+153 -67
View File
@@ -1,73 +1,149 @@
[versions]
jdkRelease = "17"
core = "1.17.0"
jdkRelease = "21"
agp = "8.13.2"
kotlin = "2.3.0"
androidx-room = "2.8.4"
androidx-lifecycle = "2.10.0"
accompanist = "0.37.3"
benchmarkMacroJunit4 = "1.4.1"
concurrentFutures = "1.3.0"
coreAnimation = "1.0.0"
coreKtx = "1.17.0"
error_prone_annotations = "2.44.0"
espressoCore = "3.7.0"
junit = "1.3.0"
junitVersion = "4.13.2"
mockito = "5.14.2"
mockitoKotlin = "5.4.0"
opto = "1.0.18"
protobuf = "4.33.2"
protocVersion = "4.33.1"
retrofit = "3.0.0"
room = "2.8.4"
testRules = "1.7.0"
testRunner = "1.7.0"
truth = "1.4.5"
activityCompose = "1.12.0"
airbnbLottie = "6.7.1"
androidDesugar = "2.1.5"
coil = "2.7.0"
composeBom = "2025.11.01"
compose = "1.10.0-rc01"
composeMaterial = "1.10.0-rc01"
composeMaterial3 = "1.5.0-alpha09"
composeMaterialIcons = "1.7.8"
composeCompiler = "1.5.15"
constraintlayout = "2.2.1"
dagger = "2.57.2"
datastore = "1.2.0"
dynamicanimation = "1.1.0"
fuzzywuzzy = "1.4.0"
googleMaterial = "1.13.0"
graphicsCore = "1.0.3"
graphicsPath = "1.0.1"
graphicsShapes = "1.1.0"
hokoBlur = "1.5.5"
javaxInject = "1"
kdrag0nColorkt = "1.0.5"
kotlinxCoroutines = "1.10.2"
kotlinxSerialization = "1.9.0"
leakcanaryAndroid = "2.14"
libsu = "6.0.0"
lifecycle = "2.10.0"
materialMotionCompose = "2.0.1"
navigationCompose = "2.9.6"
okhttp = "5.3.2"
palette = "1.0.0"
persianDate = "1.7.1"
preference = "1.2.1"
profileinstaller = "1.4.1"
recyclerview = "1.4.0"
reorderable = "2.5.1"
restrictionBypass = "2.2"
slice = "1.1.0-alpha02"
smartspacer = "1.1.2"
uiautomator = "2.3.0"
window = "1.5.1"
agp = "8.13.1"
baselineprofile = "1.4.1"
kotlin = "2.2.21"
protobuf = "0.9.5"
licensee = "1.14.1"
refine = "4.4.0"
spotless = "8.1.0"
guava = "33.5.0-android"
[plugins]
android-application = { id = "com.android.application", version.ref = "agp" }
android-library = { id = "com.android.library", version.ref = "agp" }
android-test = { id = "com.android.test", version.ref = "agp" }
androidx-baselineprofile = "androidx.baselineprofile:1.4.1"
androidx-baselineprofile = { id = "androidx.baselineprofile", version.ref = "baselineprofile" }
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
kotlin-compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
kotlin-parcelize = { id = "org.jetbrains.kotlin.plugin.parcelize", version.ref = "kotlin" }
kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
google-ksp = "com.google.devtools.ksp:2.3.4"
google-protobuf = "com.google.protobuf:0.9.6"
cash-licensee = "app.cash.licensee:1.14.1"
google-ksp = "com.google.devtools.ksp:2.3.3"
google-protobuf = { id = "com.google.protobuf", version.ref = "protobuf" }
cash-licensee = { id = "app.cash.licensee", version.ref = "licensee" }
rikka-refine = { id = "dev.rikka.tools.refine", version.ref = "refine" }
diffplug-spotless = "com.diffplug.spotless:8.1.0"
diffplug-spotless = { id = "com.diffplug.spotless", version.ref = "spotless" }
[libraries]
# AndroidX
androidx-activity-compose = "androidx.activity:activity-compose:1.12.2"
androidx-benchmark-macro-junit4 = "androidx.benchmark:benchmark-macro-junit4:1.4.1"
androidx-concurrent-futures = "androidx.concurrent:concurrent-futures:1.3.0"
androidx-constraintlayout = "androidx.constraintlayout:constraintlayout:2.2.1"
androidx-core-animation = "androidx.core:core-animation:1.0.0"
androidx-core-ktx = "androidx.core:core-ktx:1.17.0"
androidx-datastore-preferences = "androidx.datastore:datastore-preferences:1.2.0"
androidx-dynamicanimation = "androidx.dynamicanimation:dynamicanimation:1.1.0"
androidx-espresso-core = "androidx.test.espresso:espresso-core:3.7.0"
androidx-junit = "androidx.test.ext:junit:1.3.0"
androidx-lifecycle-common = { module = "androidx.lifecycle:lifecycle-common", version.ref = "androidx-lifecycle" }
androidx-lifecycle-viewmodel-compose = { group = "androidx.lifecycle", name = "lifecycle-viewmodel-compose", version.ref = "androidx-lifecycle" }
androidx-navigation-compose = "androidx.navigation:navigation-compose:2.9.6"
androidx-palette-ktx = "androidx.palette:palette-ktx:1.0.0"
androidx-preference-ktx = "androidx.preference:preference-ktx:1.2.1"
androidx-profileinstaller = "androidx.profileinstaller:profileinstaller:1.4.1"
androidx-recyclerview = "androidx.recyclerview:recyclerview:1.4.0"
androidx-slice-core = "androidx.slice:slice-core:1.1.0-alpha02"
androidx-uiautomator = "androidx.test.uiautomator:uiautomator:2.3.0"
androidx-window = "androidx.window:window:1.5.1"
androidx-activity-compose = { group = "androidx.activity", name = "activity-compose", version.ref = "activityCompose" }
androidx-benchmark-macro-junit4 = { module = "androidx.benchmark:benchmark-macro-junit4", version.ref = "benchmarkMacroJunit4" }
androidx-concurrent-futures = { module = "androidx.concurrent:concurrent-futures", version.ref = "concurrentFutures" }
androidx-constraintlayout = { group = "androidx.constraintlayout", name = "constraintlayout", version.ref = "constraintlayout" }
androidx-core = { module = "androidx.core:core", version.ref = "core" }
androidx-core-animation = { module = "androidx.core:core-animation", version.ref = "coreAnimation" }
androidx-core-ktx = { module = "androidx.core:core-ktx", version.ref = "coreKtx" }
androidx-datastore-preferences = { group = "androidx.datastore", name = "datastore-preferences", version.ref = "datastore" }
androidx-dynamicanimation = { module = "androidx.dynamicanimation:dynamicanimation", version.ref = "dynamicanimation" }
androidx-espresso-core = { module = "androidx.test.espresso:espresso-core", version.ref = "espressoCore" }
androidx-graphics-core = { group = "androidx.graphics", name = "graphics-core", version.ref = "graphicsCore" }
androidx-graphics-path = { group = "androidx.graphics", name = "graphics-path", version.ref = "graphicsPath" }
androidx-graphics-shapes = { group = "androidx.graphics", name = "graphics-shapes", version.ref = "graphicsShapes" }
androidx-junit = { module = "androidx.test.ext:junit", version.ref = "junit" }
androidx-lifecycle-common = { module = "androidx.lifecycle:lifecycle-common", version.ref = "lifecycle" }
androidx-lifecycle-viewmodel-compose = { group = "androidx.lifecycle", name = "lifecycle-viewmodel-compose", version.ref = "lifecycle" }
androidx-navigation-compose = { group = "androidx.navigation", name = "navigation-compose", version.ref = "navigationCompose" }
androidx-palette-ktx = { group = "androidx.palette", name = "palette-ktx", version.ref = "palette" }
androidx-preference-ktx = { group = "androidx.preference", name = "preference-ktx", version.ref = "preference" }
androidx-profileinstaller = { group = "androidx.profileinstaller", name = "profileinstaller", version.ref = "profileinstaller" }
androidx-recyclerview = { group = "androidx.recyclerview", name = "recyclerview", version.ref = "recyclerview" }
androidx-slice-core = { group = "androidx.slice", name = "slice-core", version.ref = "slice" }
androidx-test-rules = { group = "androidx.test", name = "rules", version.ref = "testRules" }
androidx-test-runner = { group = "androidx.test", name = "runner", version.ref = "testRunner" }
androidx-uiautomator = { module = "androidx.test.uiautomator:uiautomator", version.ref = "uiautomator" }
androidx-window = { group = "androidx.window", name = "window", version.ref = "window" }
# Compose
compose-bom = "androidx.compose:compose-bom:2025.12.01"
compose-foundation = { module = "androidx.compose.foundation:foundation" }
compose-material-icons = "androidx.compose.material:material-icons-extended:1.7.8"
compose-material3 = { module = "androidx.compose.material3:material3" }
compose-material3-windowSizeClass = { module = "androidx.compose.material3:material3-window-size-class" }
compose-runtime-livedata = { module = "androidx.compose.runtime:runtime-livedata" }
compose-ui = { module = "androidx.compose.ui:ui" }
compose-ui-google-fonts = { module = "androidx.compose.ui:ui-text-google-fonts" }
compose-ui-tooling = { module = "androidx.compose.ui:ui-tooling" }
compose-ui-tooling-preview = { module = "androidx.compose.ui:ui-tooling-preview" }
compose-ui-util = { module = "androidx.compose.ui:ui-util" }
compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "composeBom" }
compose-foundation = { group = "androidx.compose.foundation", name = "foundation", version.ref = "compose" }
compose-foundation-layout = { group = "androidx.compose.foundation", name = "foundation-layout", version.ref = "compose" }
compose-material = { group = "androidx.compose.material", name = "material", version.ref = "composeMaterial" }
compose-material-icons = { group = "androidx.compose.material", name = "material-icons-extended", version.ref = "composeMaterialIcons" }
compose-material3 = { group = "androidx.compose.material3", name = "material3", version.ref = "composeMaterial3" }
compose-material3-windowSizeClass = { group = "androidx.compose.material3", name = "material3-window-size-class", version.ref = "composeMaterial3" }
compose-runtime = { group = "androidx.compose.runtime", name = "runtime", version.ref = "compose" }
compose-runtime-livedata = { group = "androidx.compose.runtime", name = "runtime-livedata", version.ref = "compose" }
compose-ui = { group = "androidx.compose.ui", name = "ui", version.ref = "compose" }
compose-ui-google-fonts = { group = "androidx.compose.ui", name = "ui-text-google-fonts", version.ref = "compose" }
compose-ui-graphics = { group = "androidx.compose.ui", name = "ui-graphics", version.ref = "compose"}
compose-ui-test-junit4 = { group = "androidx.compose.ui", name = "ui-test-junit4", version.ref = "compose" }
compose-ui-test-manifest = { group = "androidx.compose.ui", name = "ui-test-manifest", version.ref = "compose" }
compose-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling", version.ref = "compose" }
compose-ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview", version.ref = "compose" }
compose-ui-util = { group = "androidx.compose.ui", name = "ui-util", version.ref = "compose" }
compose-compiler = { group = "androidx.compose.compiler", name = "compose-compiler", version.ref = "composeCompiler"}
# Dagger & Hilt
hilt-android = { group = "com.google.dagger", name = "hilt-android", version.ref = "dagger" }
hilt-compiler = { group = "com.google.dagger", name = "hilt-compiler", version.ref = "dagger" }
dagger = { group = "com.google.dagger", name = "dagger", version.ref = "dagger" }
dagger-compiler = { group = "com.google.dagger", name = "dagger-compiler", version.ref = "dagger" }
dagger-android-processor = { group = "com.google.dagger", name = "dagger-android-processor", version.ref = "dagger" }
dagger-hilt-android = { group = "com.google.dagger", name = "hilt-android", version.ref = "dagger" }
dagger-hilt-compiler = { group = "com.google.dagger", name = "hilt-compiler", version.ref = "dagger" }
# Accompanist
accompanist-adaptive = { group = "com.google.accompanist", name = "accompanist-adaptive", version.ref = "accompanist" }
@@ -80,48 +156,58 @@ opto-compose = { group = "com.patrykmichalik.opto", name = "compose", version.re
opto-domain = { group = "com.patrykmichalik.opto", name = "domain", version.ref = "opto" }
# Retrofit & OkHttp
protobuf-javalite = { module = "com.google.protobuf:protobuf-javalite", version.ref = "protocVersion" }
retrofit-core = { group = "com.squareup.retrofit2", name = "retrofit", version.ref = "retrofit" }
retrofit-converter-kotlinx = { group = "com.squareup.retrofit2", name = "converter-kotlinx-serialization", version.ref = "retrofit" }
okhttp = "com.squareup.okhttp3:okhttp:5.3.2"
okhttp = { group = "com.squareup.okhttp3", name = "okhttp", version.ref = "okhttp" }
# Room
room-compiler = { group = "androidx.room", name = "room-compiler", version.ref = "androidx-room" }
room-ktx = { group = "androidx.room", name = "room-ktx", version.ref = "androidx-room" }
room-runtime = { group = "androidx.room", name = "room-runtime", version.ref = "androidx-room" }
room-compiler = { group = "androidx.room", name = "room-compiler", version.ref = "room" }
room-ktx = { group = "androidx.room", name = "room-ktx", version.ref = "room" }
room-runtime = { group = "androidx.room", name = "room-runtime", version.ref = "room" }
# Kotlin
kotlin-androidExtensionRuntime = { module = "org.jetbrains.kotlin:kotlin-android-extensions-runtime", version.ref = "kotlin" }
kotlin-parcelizeRuntime = { module = "org.jetbrains.kotlin:kotlin-parcelize-runtime", version.ref = "kotlin" }
kotlin-stdlib-jdk7 = { module = "org.jetbrains.kotlin:kotlin-stdlib-jdk7", version.ref = "kotlin" }
# KotlinX
kotlinx-coroutines-android = "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.10.2"
kotlinx-serialization-json = "org.jetbrains.kotlinx:kotlinx-serialization-json:1.9.0"
protobuf-protoc = { module = "com.google.protobuf:protoc", version.ref = "protobuf" }
protobuf-javalite = { module = "com.google.protobuf:protobuf-javalite", version.ref = "protobuf" }
kotlinx-coroutines-android = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-android", version.ref = "kotlinxCoroutines" }
kotlinx-coroutines-test = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-test", version.ref = "kotlinxCoroutines" }
kotlinx-serialization-json = { group = "org.jetbrains.kotlinx", name = "kotlinx-serialization-json", version.ref = "kotlinxSerialization" }
# Other
android-desugarJdkLibs = "com.android.tools:desugar_jdk_libs:2.1.5"
airbnb-lottie = "com.airbnb.android:lottie:6.7.1"
chickenhook-restrictionbypass = "com.github.ChickenHook:RestrictionBypass:2.2"
coil-compose = "io.coil-kt:coil-compose:2.7.0"
google-material = "com.google.android.material:material:1.13.0"
hoko-blur = "io.github.hokofly:hoko-blur:1.5.5"
kdrag0n-colorkt = "dev.kdrag0n:colorkt:1.0.5"
android-desugarJdkLibs = { group = "com.android.tools", name = "desugar_jdk_libs", version.ref = "androidDesugar" }
airbnb-lottie = { group = "com.airbnb.android", name = "lottie", version.ref = "airbnbLottie" }
chickenhook-restrictionbypass = { group = "com.github.ChickenHook", name = "RestrictionBypass", version.ref = "restrictionBypass" }
coil-compose = { group = "io.coil-kt", name = "coil-compose", version.ref = "coil" }
google-errorprone-annotations = { module = "com.google.errorprone:error_prone_annotations", version.ref = "error_prone_annotations" }
google-material = { group = "com.google.android.material", name = "material", version.ref = "googleMaterial" }
google-truth = { group = "com.google.truth", name = "truth", version.ref = "truth" }
hoko-blur = { group = "io.github.hokofly", name = "hoko-blur", version.ref = "hokoBlur" }
junit = { group = "junit", name = "junit", version.ref = "junitVersion" }
mockito-android = { group = "org.mockito", name = "mockito-android", version.ref = "mockito" }
mockito-kotlin = { group = "org.mockito.kotlin", name = "mockito-kotlin", version.ref = "mockitoKotlin" }
mockito-robolectric = { group = "org.mockito", name = "mockito-core", version.ref = "mockito" }
mockito-robolectric-bytebuddy = { group = "net.bytebuddy", name = "byte-buddy", version = "1.15.11" }
mockito-robolectric-bytebuddy-agent = { group = "net.bytebuddy", name = "byte-buddy-agent", version = "1.15.11" }
javax-inject = { group = "javax.inject", name = "javax.inject", version.ref = "javaxInject" }
kdrag0n-colorkt = { group = "dev.kdrag0n", name = "colorkt", version.ref = "kdrag0nColorkt" }
leakcanary-android = { module = "com.squareup.leakcanary:leakcanary-android", version.ref = "leakcanaryAndroid" }
libsu-core = { group = "com.github.topjohnwu.libsu", name = "core", version.ref = "libsu" }
libsu-service = { group = "com.github.topjohnwu.libsu", name = "service", version.ref = "libsu" }
material-motion-compose = "io.github.fornewid:material-motion-compose-core:1.2.1"
persian-date = "com.github.samanzamani:PersianDate:1.7.1"
reorderable = "sh.calvin.reorderable:reorderable:2.5.1"
material-motion-compose = { group = "io.github.fornewid", name = "material-motion-compose-core", version.ref = "materialMotionCompose" }
persian-date = { group = "com.github.samanzamani", name = "PersianDate", version.ref = "persianDate" }
reorderable = { group = "sh.calvin.reorderable", name = "reorderable", version.ref = "reorderable" }
rikka-annotation = { module = "dev.rikka.tools.refine:annotation", version.ref = "refine" }
rikka-annotation-processor = { module = "dev.rikka.tools.refine:annotation-processor", version.ref = "refine" }
rikka-refine-runtime = { group = "dev.rikka.tools.refine", name = "runtime", version.ref = "refine" }
smartspacer-sdk = "com.kieronquinn.smartspacer:sdk-client:1.1.2"
xdrop-fuzzywuzzy = "me.xdrop:fuzzywuzzy:1.4.0"
errorprone-annotations = "com.google.errorprone:error_prone_annotations:2.45.0"
composeRules = "io.nlopez.compose.rules:ktlint:0.5.3"
smartspacer-sdk = { group = "com.kieronquinn.smartspacer", name = "sdk-client", version.ref = "smartspacer" }
xdrop-fuzzywuzzy = { group = "me.xdrop", name = "fuzzywuzzy", version.ref = "fuzzywuzzy" }
google-guava = { group = "com.google.guava", name = "guava", version.ref = "guava" }
[bundles]
accompanist = ["accompanist-adaptive", "accompanist-drawablepainter", "accompanist-permissions"]
graphics = ["androidx-graphics-core", "androidx-graphics-path", "androidx-graphics-shapes"]
opto = ["opto-domain", "opto-core", "opto-compose"]
retrofit = ["retrofit-core", "retrofit-converter-kotlinx", "okhttp"]
room = ["room-runtime", "room-ktx"]
+4 -11
View File
@@ -1,12 +1,5 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<group>
<clip-path android:pathData="M0,0h24v24h-24z" />
<path
android:fillColor="#ffffff"
android:pathData="M20.925,8.5467L15.2784,8.0567L13.0734,2.865C12.6767,1.92 11.3234,1.92 10.9267,2.865L8.7217,8.0683L3.0867,8.5467C2.06,8.6283 1.64,9.9117 2.4217,10.5883L6.7034,14.2983L5.42,19.805C5.1867,20.8083 6.2717,21.6017 7.1584,21.065L12,18.1483L16.8417,21.0767C17.7284,21.6133 18.8134,20.82 18.58,19.8167L17.2967,14.2983L21.5784,10.5883C22.36,9.9117 21.9517,8.6283 20.925,8.5467ZM12,15.9667L7.6134,18.615L8.78,13.6217L4.9067,10.2617L10.0167,9.8183L12,5.1167L13.995,9.83L19.105,10.2733L15.2317,13.6333L16.3984,18.6267L12,15.9667Z" />
</group>
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:tint="#000000" android:viewportHeight="960" android:viewportWidth="960" android:width="24dp">
<path android:fillColor="@android:color/white" android:pathData="M480,691L314,791Q303,798 291,797Q279,796 270,789Q261,782 256,771.5Q251,761 254,748L298,559L151,432Q141,423 138.5,411.5Q136,400 140,389Q144,378 152,371Q160,364 174,362L368,345L443,167Q448,155 458.5,149Q469,143 480,143Q491,143 501.5,149Q512,155 517,167L592,345L786,362Q800,364 808,371Q816,378 820,389Q824,400 821.5,411.5Q819,423 809,432L662,559L706,748Q709,761 704,771.5Q699,782 690,789Q681,796 669,797Q657,798 646,791L480,691Z"/>
</vector>
+4 -10
View File
@@ -1,11 +1,5 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="?android:attr/textColorPrimary"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#ffffff"
android:fillType="evenOdd"
android:pathData="M22,17C22,18.6569 20.6569,20 19,20H5C3.3431,20 2,18.6569 2,17V7C2,5.3432 3.3431,4 5,4H10L12,6H19C20.6569,6 22,7.3432 22,9V17ZM4,7V17C4,17.5523 4.4477,18 5,18H19C19.5523,18 20,17.5523 20,17V9C20,8.4477 19.5523,8 19,8H11L9,6H5C4.4477,6 4,6.4477 4,7Z" />
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:tint="#000000" android:viewportHeight="960" android:viewportWidth="960" android:width="24dp">
<path android:fillColor="@android:color/white" android:pathData="M160,800Q127,800 103.5,776.5Q80,753 80,720L80,240Q80,207 103.5,183.5Q127,160 160,160L367,160Q383,160 397.5,166Q412,172 423,183L480,240L800,240Q833,240 856.5,263.5Q880,287 880,320L880,720Q880,753 856.5,776.5Q833,800 800,800L160,800Z"/>
</vector>
+4 -9
View File
@@ -1,10 +1,5 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#ffffff"
android:fillType="evenOdd"
android:pathData="M12,3L1.7923,10.795C1.3545,11.1293 1.2701,11.7549 1.6037,12.1932C1.9383,12.6329 2.5663,12.7173 3.0051,12.3815L4,11.62V18C4,19.6569 5.3432,21 7,21H17C18.6569,21 20,19.6569 20,18V11.62L20.9998,12.3796C21.4367,12.7116 22.0598,12.6277 22.3934,12.1921C22.7283,11.7548 22.6449,11.1288 22.2071,10.7945L12,3ZM14,19H17C17.5523,19 18,18.5523 18,18V10.1L12,5.52L6,10.1V18C6,18.5523 6.4477,19 7,19H10V15C10,13.8954 10.8954,13 12,13C13.1046,13 14,13.8954 14,15V19Z" />
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:tint="#000000" android:viewportHeight="960" android:viewportWidth="960" android:width="24dp">
<path android:fillColor="@android:color/white" android:pathData="M160,760L160,400Q160,381 168.5,364Q177,347 192,336L432,156Q453,140 480,140Q507,140 528,156L768,336Q783,347 791.5,364Q800,381 800,400L800,760Q800,793 776.5,816.5Q753,840 720,840L600,840Q583,840 571.5,828.5Q560,817 560,800L560,600Q560,583 548.5,571.5Q537,560 520,560L440,560Q423,560 411.5,571.5Q400,583 400,600L400,800Q400,817 388.5,828.5Q377,840 360,840L240,840Q207,840 183.5,816.5Q160,793 160,760Z"/>
</vector>
+2 -2
View File
@@ -19,6 +19,6 @@
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="?attr/materialColorOnPrimaryFixed"
android:pathData="M263.72,864Q234,864 213,842.85Q192,821.7 192,792L192,408Q192,378.3 213.15,357.15Q234.3,336 264,336L288,336L288,240Q288,160.32 344.23,104.16Q400.45,48 480.23,48Q560,48 616,104.16Q672,160.32 672,240L672,336L696,336Q725.7,336 746.85,357.15Q768,378.3 768,408L768,792Q768,821.7 746.84,842.85Q725.68,864 695.96,864L263.72,864ZM264,792L696,792Q696,792 696,792Q696,792 696,792L696,408Q696,408 696,408Q696,408 696,408L264,408Q264,408 264,408Q264,408 264,408L264,792Q264,792 264,792Q264,792 264,792ZM480.21,672Q510,672 531,650.79Q552,629.58 552,599.79Q552,570 530.79,549Q509.58,528 479.79,528Q450,528 429,549.21Q408,570.42 408,600.21Q408,630 429.21,651Q450.42,672 480.21,672ZM360,336L600,336L600,240Q600,190 565,155Q530,120 480,120Q430,120 395,155Q360,190 360,240L360,336ZM264,792Q264,792 264,792Q264,792 264,792L264,408Q264,408 264,408Q264,408 264,408L264,408Q264,408 264,408Q264,408 264,408L264,792Q264,792 264,792Q264,792 264,792L264,792Z" />
android:fillColor="@color/materialColorOnPrimaryFixed"
android:pathData="M263.72,864Q234,864 213,842.85Q192,821.7 192,792L192,408Q192,378.3 213.15,357.15Q234.3,336 264,336L288,336L288,240Q288,160.32 344.23,104.16Q400.45,48 480.23,48Q560,48 616,104.16Q672,160.32 672,240L672,336L696,336Q725.7,336 746.85,357.15Q768,378.3 768,408L768,792Q768,821.7 746.84,842.85Q725.68,864 695.96,864L263.72,864ZM264,792L696,792Q696,792 696,792Q696,792 696,792L696,408Q696,408 696,408Q696,408 696,408L264,408Q264,408 264,408Q264,408 264,408L264,792Q264,792 264,792Q264,792 264,792ZM480.21,672Q510,672 531,650.79Q552,629.58 552,599.79Q552,570 530.79,549Q509.58,528 479.79,528Q450,528 429,549.21Q408,570.42 408,600.21Q408,630 429.21,651Q450.42,672 480.21,672ZM360,336L600,336L600,240Q600,190 565,155Q530,120 480,120Q430,120 395,155Q360,190 360,240L360,336ZM264,792Q264,792 264,792Q264,792 264,792L264,408Q264,408 264,408Q264,408 264,408L264,408Q264,408 264,408Q264,408 264,408L264,792Q264,792 264,792Q264,792 264,792L264,792Z"/>
</vector>
+4 -4
View File
@@ -4,13 +4,13 @@
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#ffffff"
android:fillType="evenOdd"
android:fillColor="#000000"
android:fillType="nonZero"
android:pathData="M9,2C7.3432,2 6,3.3431 6,5V19C6,20.6569 7.3432,22 9,22H15C16.6569,22 18,20.6569 18,19V5C18,3.3431 16.6569,2 15,2H9ZM9,4C8.4477,4 8,4.4477 8,5V19C8,19.5523 8.4477,20 9,20H15C15.5523,20 16,19.5523 16,19V5C16,4.4477 15.5523,4 15,4H9Z" />
<path
android:fillColor="#ffffff"
android:fillColor="#000000"
android:pathData="M21,6L21,6A1,1 0,0 1,22 7L22,17A1,1 0,0 1,21 18L21,18A1,1 0,0 1,20 17L20,7A1,1 0,0 1,21 6z" />
<path
android:fillColor="#ffffff"
android:fillColor="#000000"
android:pathData="M3,6L3,6A1,1 0,0 1,4 7L4,17A1,1 0,0 1,3 18L3,18A1,1 0,0 1,2 17L2,7A1,1 0,0 1,3 6z" />
</vector>
@@ -19,5 +19,8 @@
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:launcher="http://schemas.android.com/apk/res-auto"
style="@style/BaseIcon"
android:textColor="?attr/folderTextColor"
android:includeFontPadding="false"
launcher:iconDisplay="drawer_folder" />
android:hapticFeedbackEnabled="false"
launcher:iconDisplay="drawer_folder"
launcher:centerVertically="true" />
@@ -25,8 +25,8 @@
android:paddingLeft="@dimen/dynamic_grid_cell_padding_x"
android:paddingRight="@dimen/dynamic_grid_cell_padding_x"
android:focusable="true" >
<com.android.launcher3.BubbleTextView
style="@style/BaseIcon"
<com.android.launcher3.views.DoubleShadowBubbleTextView
style="@style/BaseIcon.AllApps"
android:id="@+id/folder_icon_name"
android:focusable="false"
android:layout_gravity="top"
@@ -1,4 +1,5 @@
<?xml version="1.0" encoding="utf-8"?><!-- Copyright (C) 2023 The Android Open Source Project
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2021 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -35,45 +36,75 @@
android:id="@+id/primary_widgets_list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingHorizontal="@dimen/widget_list_horizontal_margin"
android:clipToPadding="false" />
<com.android.launcher3.widget.picker.WidgetsRecyclerView
android:id="@+id/work_widgets_list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingHorizontal="@dimen/widget_list_horizontal_margin"
android:clipToPadding="false" />
</com.android.launcher3.widget.picker.WidgetPagedView>
<!-- SearchAndRecommendationsView without the tab layout as well -->
<!-- SearchAndRecommendationsView contains the tab layout as well -->
<com.android.launcher3.views.StickyHeaderLayout
android:id="@+id/search_and_recommendations_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/collapse_handle"
android:paddingBottom="0dp"
android:clipToOutline="true"
android:orientation="vertical">
<TextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:textSize="24sp"
android:layout_marginTop="24dp"
android:textColor="?attr/widgetPickerTitleColor"
android:text="@string/widget_button_text"/>
<FrameLayout
android:id="@+id/search_bar_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/widgetPickerPrimarySurfaceColor"
android:clipToPadding="false"
android:elevation="0.1dp"
android:paddingHorizontal="@dimen/widget_list_horizontal_margin"
android:background="?attr/widgetPickerPrimarySurfaceColor"
android:paddingBottom="8dp"
launcher:layout_sticky="true">
<include layout="@layout/widgets_search_bar" />
<ImageButton
android:id="@+id/widget_picker_widget_options_menu"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_gravity="end|bottom"
android:layout_marginStart="8dp"
android:layout_marginBottom="8dp"
android:background="@drawable/full_rounded_transparent_ripple"
android:contentDescription="@string/widget_picker_widget_options_button_description"
android:padding="12dp"
android:src="@drawable/ic_more_vert_dots"
android:visibility="gone"
android:tint="?attr/widgetPickerWidgetOptionsMenuColor" />
</FrameLayout>
<!-- Shown when there are recommendations to display -->
<LinearLayout
android:id="@+id/widget_recommendations_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/suggestions_header"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:orientation="horizontal"
android:background="?attr/widgetPickerPrimarySurfaceColor"
launcher:layout_sticky="true">
android:layout_marginBottom="8dp"
android:background="@drawable/widgets_surface_background"
android:clipToOutline="true"
android:orientation="vertical"
android:layout_marginHorizontal="@dimen/widget_list_horizontal_margin"
android:visibility="gone">
<include layout="@layout/widget_recommendations" />
</LinearLayout>
<com.android.launcher3.workprofile.PersonalWorkSlidingTabStrip
@@ -82,8 +113,8 @@
android:layout_height="64dp"
android:gravity="center_horizontal"
android:orientation="horizontal"
android:paddingVertical="8dp"
android:background="?attr/widgetPickerPrimarySurfaceColor"
android:paddingBottom="8dp"
android:paddingHorizontal="@dimen/widget_list_horizontal_margin"
style="@style/TextHeadline"
launcher:layout_sticky="true">
@@ -112,7 +143,6 @@
android:textColor="@color/widget_picker_tab_text"
android:textSize="14sp"
style="?android:attr/borderlessButtonStyle" />
</com.android.launcher3.workprofile.PersonalWorkSlidingTabStrip>
</com.android.launcher3.views.StickyHeaderLayout>
</FrameLayout>
@@ -15,13 +15,70 @@
<merge xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:launcher="http://schemas.android.com/apk/res-auto">
<FrameLayout
<LinearLayout
android:id="@+id/widgets_two_pane_sheet_recyclerview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="start"
android:layout_gravity="start"
android:layout_alignParentStart="true">
android:clipChildren="false"
android:layout_alignParentStart="true"
android:orientation="vertical">
<!-- SearchAndRecommendationsView without the tab layout as well -->
<LinearLayout
android:id="@+id/search_and_recommendations_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clipToOutline="true"
android:background="?attr/widgetPickerPrimarySurfaceColor"
android:orientation="vertical">
<LinearLayout
android:id="@+id/search_bar_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
android:background="?attr/widgetPickerPrimarySurfaceColor"
android:paddingHorizontal="@dimen/widget_list_horizontal_margin_two_pane"
launcher:layout_sticky="true">
<FrameLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:clipToPadding="false"
android:elevation="0.1dp"
android:paddingBottom="16dp">
<include layout="@layout/widgets_search_bar" />
</FrameLayout>
<ImageButton
android:id="@+id/widget_picker_widget_options_menu"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_marginStart="8dp"
android:layout_marginBottom="16dp"
android:layout_gravity="bottom"
android:background="@drawable/full_rounded_transparent_ripple"
android:contentDescription="@string/widget_picker_widget_options_button_description"
android:padding="12dp"
android:src="@drawable/ic_more_vert_dots"
android:visibility="gone"
android:tint="?attr/widgetPickerWidgetOptionsMenuColor" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/suggestions_header"
android:layout_marginHorizontal="@dimen/widget_list_horizontal_margin_two_pane"
android:orientation="horizontal"
android:paddingBottom="16dp"
android:background="?attr/widgetPickerPrimarySurfaceColor"
launcher:layout_sticky="true">
</LinearLayout>
</LinearLayout>
<com.android.launcher3.widget.picker.WidgetsRecyclerView
android:id="@+id/primary_widgets_list_view"
@@ -30,39 +87,12 @@
android:layout_marginHorizontal="@dimen/widget_list_horizontal_margin_two_pane"
android:clipToPadding="false" />
<!-- SearchAndRecommendationsView without the tab layout as well -->
<com.android.launcher3.views.StickyHeaderLayout
android:id="@+id/search_and_recommendations_container"
<com.android.launcher3.widget.picker.WidgetsRecyclerView
android:id="@+id/search_widgets_list_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clipToOutline="true"
android:orientation="vertical">
<FrameLayout
android:id="@+id/search_bar_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/widgetPickerPrimarySurfaceColor"
android:clipToPadding="false"
android:elevation="0.1dp"
android:paddingBottom="8dp"
android:paddingHorizontal="@dimen/widget_list_horizontal_margin_two_pane"
launcher:layout_sticky="true">
<include layout="@layout/widgets_search_bar" />
</FrameLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/suggestions_header"
android:layout_marginTop="8dp"
android:layout_marginHorizontal="@dimen/widget_list_horizontal_margin_two_pane"
android:paddingBottom="16dp"
android:orientation="horizontal"
android:background="?attr/widgetPickerPrimarySurfaceColor"
launcher:layout_sticky="true">
</LinearLayout>
</com.android.launcher3.views.StickyHeaderLayout>
</FrameLayout>
</merge>
android:layout_height="match_parent"
android:clipToPadding="false"
android:paddingHorizontal="@dimen/widget_list_horizontal_margin_two_pane"
android:visibility="gone" />
</LinearLayout>
</merge>
+29 -30
View File
@@ -1,6 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2020 The Android Open Source Project
<?xml version="1.0" encoding="utf-8"?><!-- Copyright (C) 2020 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -21,45 +19,46 @@
android:paddingTop="@dimen/work_edu_card_margin"
android:paddingBottom="@dimen/work_edu_card_bottom_margin"
android:gravity="center">
<RelativeLayout
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:background="@drawable/work_card"
android:layout_gravity="center_horizontal"
android:paddingEnd="@dimen/work_card_margin"
android:paddingStart="@dimen/work_card_margin"
android:paddingTop="@dimen/work_card_margin"
android:paddingEnd="@dimen/work_card_margin_end"
android:paddingBottom="@dimen/work_card_margin"
android:id="@+id/wrapper">
<TextView
style="@style/PrimaryHeadline"
android:textColor="?android:attr/textColorPrimary"
android:id="@+id/work_apps_paused_title"
android:layout_width="wrap_content"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/work_card_margin"
android:layout_marginEnd="@dimen/work_card_margin"
android:layout_weight="1"
android:layout_marginTop="@dimen/work_card_margin"
android:paddingEnd="@dimen/work_edu_card_text_end_margin"
android:text="@string/work_profile_edu_work_apps"
android:textDirection="locale"
android:textSize="18sp" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="@dimen/padded_rounded_button_height"
android:orientation="horizontal">
<FrameLayout
android:layout_width="@dimen/rounded_button_width"
android:layout_height="@dimen/rounded_button_width"
android:layout_alignParentEnd="true"
android:padding="@dimen/rounded_button_padding">
<ImageView
android:id="@+id/action_btn"
android:layout_width="@dimen/x_icon_size"
android:layout_height="@dimen/x_icon_size"
android:layout_gravity="center"
android:contentDescription="@string/accessibility_close"
android:src="@drawable/ic_close" />
</FrameLayout>
</RelativeLayout>
</RelativeLayout>
</com.android.launcher3.allapps.WorkEduCard>
<FrameLayout
android:id="@+id/action_btn"
android:layout_width="@dimen/rounded_button_width"
android:layout_height="@dimen/rounded_button_width"
android:layout_marginTop="@dimen/work_edu_card_button_margin_top"
android:clickable="true"
android:contentDescription="@string/accessibility_close"
android:gravity="center"
android:background="@drawable/inset_rounded_action_button">
<ImageButton
android:layout_width="@dimen/x_icon_size"
android:layout_height="@dimen/x_icon_size"
android:clickable="false"
android:scaleType="centerInside"
android:layout_gravity="center"
android:importantForAccessibility="no"
android:background="@android:color/transparent"
android:src="@drawable/ic_close_work_edu" />
</FrameLayout>
</LinearLayout>
</com.android.launcher3.allapps.WorkEduCard>
+1 -5
View File
@@ -327,7 +327,7 @@
<!-- Date formats -->
<string name="smartspace_calendar_gregorian">Gregorian</string>
<string name="smartspace_calendar_persian">Persian</string>
<string name="smartspace_calendar_chinese">Chinese</string>
<string name="smartspace_calendar_buddhist">Buddhist</string>
<string name="generic_smartspace_concatenated_desc">%1$s, %2$s</string>
<!-- Battery labels -->
<string name="smartspace_battery_fast_charging">Fast charging</string>
@@ -391,8 +391,6 @@
<string name="privacy_policy">Privacy policy</string>
<string name="contributor_status_active">Active</string>
<string name="update_check_failed">Failed to check for updates</string>
<string name="major_update_label">Breaking change!</string>
<string name="major_update_description">You are about to update from Lawnchair <xliff:g example="15" id="current_major_version">%1$s</xliff:g> to Lawnchair <xliff:g example="16" id="next_major_version">%2$s</xliff:g>, please consider carefully as newer major version may be unstable than current version.</string>
<!--
Backup and restore
@@ -480,8 +478,6 @@
<string name="wallpaper_depth_effect_label">Wallpaper depth effect</string>
<string name="wallpaper_depth_effect_description">Zoom in and out of the wallpaper when transitioning between areas of the launcher</string>
<string name="show_sys_ui_scrim">Top shadow</string>
<string name="infinite_scrolling_label">Infinite scrolling</string>
<string name="infinite_scrolling_description">Swipe to loop between the first and last pages</string>
<string name="home_screen_grid">Home screen grid</string>
<string name="home_screen_lock">Lock home screen</string>
<string name="home_screen_unlock">Unlock home screen</string>
+1 -5
View File
@@ -327,7 +327,7 @@
<!-- Date formats -->
<string name="smartspace_calendar_gregorian">Gregorian</string>
<string name="smartspace_calendar_persian">Persian</string>
<string name="smartspace_calendar_chinese">Chinese</string>
<string name="smartspace_calendar_buddhist">Buddhist</string>
<string name="generic_smartspace_concatenated_desc">%1$s, %2$s</string>
<!-- Battery labels -->
<string name="smartspace_battery_fast_charging">Fast charging</string>
@@ -391,8 +391,6 @@
<string name="privacy_policy">Privacy policy</string>
<string name="contributor_status_active">Active</string>
<string name="update_check_failed">Failed to check for updates</string>
<string name="major_update_label">Breaking change!</string>
<string name="major_update_description">You are about to update from Lawnchair <xliff:g example="15" id="current_major_version">%1$s</xliff:g> to Lawnchair <xliff:g example="16" id="next_major_version">%2$s</xliff:g>, please consider carefully as newer major version may be unstable than current version.</string>
<!--
Backup and restore
@@ -480,8 +478,6 @@
<string name="wallpaper_depth_effect_label">Wallpaper depth effect</string>
<string name="wallpaper_depth_effect_description">Zoom in and out of the wallpaper when transitioning between areas of the launcher</string>
<string name="show_sys_ui_scrim">Top shadow</string>
<string name="infinite_scrolling_label">Infinite scrolling</string>
<string name="infinite_scrolling_description">Swipe to loop between the first and last pages</string>
<string name="home_screen_grid">Home screen grid</string>
<string name="home_screen_lock">Lock home screen</string>
<string name="home_screen_unlock">Unlock home screen</string>
+1 -5
View File
@@ -327,7 +327,7 @@
<!-- Date formats -->
<string name="smartspace_calendar_gregorian">التقويم الميلادي</string>
<string name="smartspace_calendar_persian">التقويم الفارسي</string>
<string name="smartspace_calendar_chinese">Chinese</string>
<string name="smartspace_calendar_buddhist">Buddhist</string>
<string name="generic_smartspace_concatenated_desc">%1$s %2$s</string>
<!-- Battery labels -->
<string name="smartspace_battery_fast_charging">Fast charging</string>
@@ -391,8 +391,6 @@
<string name="privacy_policy">سياسة الخصوصية</string>
<string name="contributor_status_active">مفعل</string>
<string name="update_check_failed">فشل التحقق من وجود تحديثات</string>
<string name="major_update_label">Breaking change!</string>
<string name="major_update_description">You are about to update from Lawnchair <xliff:g example="15" id="current_major_version">%1$s</xliff:g> to Lawnchair <xliff:g example="16" id="next_major_version">%2$s</xliff:g>, please consider carefully as newer major version may be unstable than current version.</string>
<!--
Backup and restore
@@ -480,8 +478,6 @@
<string name="wallpaper_depth_effect_label">تأثير عمق الخلفية</string>
<string name="wallpaper_depth_effect_description">تكبير وتصغير الخلفية عند الانتقال بين مناطق المشغل</string>
<string name="show_sys_ui_scrim">الظل العلوي</string>
<string name="infinite_scrolling_label">Infinite scrolling</string>
<string name="infinite_scrolling_description">Swipe to loop between the first and last pages</string>
<string name="home_screen_grid">شبكة الشاشة الرئيسية</string>
<string name="home_screen_lock">قفل الشاشة الرئيسية</string>
<string name="home_screen_unlock">فتح قفل الشاشة الرئيسية</string>
+1 -5
View File
@@ -327,7 +327,7 @@
<!-- Date formats -->
<string name="smartspace_calendar_gregorian">Gregorian</string>
<string name="smartspace_calendar_persian">Persian</string>
<string name="smartspace_calendar_chinese">Chinese</string>
<string name="smartspace_calendar_buddhist">Buddhist</string>
<string name="generic_smartspace_concatenated_desc">%1$s, %2$s</string>
<!-- Battery labels -->
<string name="smartspace_battery_fast_charging">Fast charging</string>
@@ -391,8 +391,6 @@
<string name="privacy_policy">Privacy policy</string>
<string name="contributor_status_active">Active</string>
<string name="update_check_failed">Failed to check for updates</string>
<string name="major_update_label">Breaking change!</string>
<string name="major_update_description">You are about to update from Lawnchair <xliff:g example="15" id="current_major_version">%1$s</xliff:g> to Lawnchair <xliff:g example="16" id="next_major_version">%2$s</xliff:g>, please consider carefully as newer major version may be unstable than current version.</string>
<!--
Backup and restore
@@ -480,8 +478,6 @@
<string name="wallpaper_depth_effect_label">Wallpaper depth effect</string>
<string name="wallpaper_depth_effect_description">Zoom in and out of the wallpaper when transitioning between areas of the launcher</string>
<string name="show_sys_ui_scrim">Top shadow</string>
<string name="infinite_scrolling_label">Infinite scrolling</string>
<string name="infinite_scrolling_description">Swipe to loop between the first and last pages</string>
<string name="home_screen_grid">Home screen grid</string>
<string name="home_screen_lock">Lock home screen</string>
<string name="home_screen_unlock">Unlock home screen</string>
+1 -5
View File
@@ -327,7 +327,7 @@
<!-- Date formats -->
<string name="smartspace_calendar_gregorian">Gregorijanski</string>
<string name="smartspace_calendar_persian">Persijski</string>
<string name="smartspace_calendar_chinese">Chinese</string>
<string name="smartspace_calendar_buddhist">Buddhist</string>
<string name="generic_smartspace_concatenated_desc">%1$s, %2$s</string>
<!-- Battery labels -->
<string name="smartspace_battery_fast_charging">Fast charging</string>
@@ -391,8 +391,6 @@
<string name="privacy_policy">Privacy policy</string>
<string name="contributor_status_active">Active</string>
<string name="update_check_failed">Failed to check for updates</string>
<string name="major_update_label">Breaking change!</string>
<string name="major_update_description">You are about to update from Lawnchair <xliff:g example="15" id="current_major_version">%1$s</xliff:g> to Lawnchair <xliff:g example="16" id="next_major_version">%2$s</xliff:g>, please consider carefully as newer major version may be unstable than current version.</string>
<!--
Backup and restore
@@ -480,8 +478,6 @@
<string name="wallpaper_depth_effect_label">Efekat dubine pozadine</string>
<string name="wallpaper_depth_effect_description">Uvećajte ili umanjite prikaz pozadine pri prelasku između različitih delova pokretača</string>
<string name="show_sys_ui_scrim">Gornja senka</string>
<string name="infinite_scrolling_label">Infinite scrolling</string>
<string name="infinite_scrolling_description">Swipe to loop between the first and last pages</string>
<string name="home_screen_grid">Mreža početnog ekrana</string>
<string name="home_screen_lock">Zaključaj početni ekran</string>
<string name="home_screen_unlock">Otključaj početni ekran</string>
+1 -5
View File
@@ -327,7 +327,7 @@
<!-- Date formats -->
<string name="smartspace_calendar_gregorian">গ্রেগরিয়ান</string>
<string name="smartspace_calendar_persian">পার্সিয়ান</string>
<string name="smartspace_calendar_chinese">Chinese</string>
<string name="smartspace_calendar_buddhist">Buddhist</string>
<string name="generic_smartspace_concatenated_desc">%1$s,%2$s</string>
<!-- Battery labels -->
<string name="smartspace_battery_fast_charging">Fast charging</string>
@@ -391,8 +391,6 @@
<string name="privacy_policy">Privacy policy</string>
<string name="contributor_status_active">Active</string>
<string name="update_check_failed">Failed to check for updates</string>
<string name="major_update_label">Breaking change!</string>
<string name="major_update_description">You are about to update from Lawnchair <xliff:g example="15" id="current_major_version">%1$s</xliff:g> to Lawnchair <xliff:g example="16" id="next_major_version">%2$s</xliff:g>, please consider carefully as newer major version may be unstable than current version.</string>
<!--
Backup and restore
@@ -480,8 +478,6 @@
<string name="wallpaper_depth_effect_label">Wallpaper depth effect</string>
<string name="wallpaper_depth_effect_description">Zoom in and out of the wallpaper when transitioning between areas of the launcher</string>
<string name="show_sys_ui_scrim">উপরের ছায়া </string>
<string name="infinite_scrolling_label">Infinite scrolling</string>
<string name="infinite_scrolling_description">Swipe to loop between the first and last pages</string>
<string name="home_screen_grid">Home screen grid</string>
<string name="home_screen_lock">Lock home screen</string>
<string name="home_screen_unlock">Unlock home screen</string>
+1 -5
View File
@@ -327,7 +327,7 @@
<!-- Date formats -->
<string name="smartspace_calendar_gregorian">Gregorian</string>
<string name="smartspace_calendar_persian">Persian</string>
<string name="smartspace_calendar_chinese">Chinese</string>
<string name="smartspace_calendar_buddhist">Buddhist</string>
<string name="generic_smartspace_concatenated_desc">%1$s, %2$s</string>
<!-- Battery labels -->
<string name="smartspace_battery_fast_charging">Fast charging</string>
@@ -391,8 +391,6 @@
<string name="privacy_policy">Privacy policy</string>
<string name="contributor_status_active">Active</string>
<string name="update_check_failed">Failed to check for updates</string>
<string name="major_update_label">Breaking change!</string>
<string name="major_update_description">You are about to update from Lawnchair <xliff:g example="15" id="current_major_version">%1$s</xliff:g> to Lawnchair <xliff:g example="16" id="next_major_version">%2$s</xliff:g>, please consider carefully as newer major version may be unstable than current version.</string>
<!--
Backup and restore
@@ -480,8 +478,6 @@
<string name="wallpaper_depth_effect_label">Wallpaper depth effect</string>
<string name="wallpaper_depth_effect_description">Zoom in and out of the wallpaper when transitioning between areas of the launcher</string>
<string name="show_sys_ui_scrim">Top shadow</string>
<string name="infinite_scrolling_label">Infinite scrolling</string>
<string name="infinite_scrolling_description">Swipe to loop between the first and last pages</string>
<string name="home_screen_grid">Home screen grid</string>
<string name="home_screen_lock">Lock home screen</string>
<string name="home_screen_unlock">Unlock home screen</string>
+1 -5
View File
@@ -327,7 +327,7 @@
<!-- Date formats -->
<string name="smartspace_calendar_gregorian">Gregorià</string>
<string name="smartspace_calendar_persian">Persa</string>
<string name="smartspace_calendar_chinese">Chinese</string>
<string name="smartspace_calendar_buddhist">Buddhist</string>
<string name="generic_smartspace_concatenated_desc">%1$s, %2$s</string>
<!-- Battery labels -->
<string name="smartspace_battery_fast_charging">Fast charging</string>
@@ -391,8 +391,6 @@
<string name="privacy_policy">Privacy policy</string>
<string name="contributor_status_active">Active</string>
<string name="update_check_failed">Failed to check for updates</string>
<string name="major_update_label">Breaking change!</string>
<string name="major_update_description">You are about to update from Lawnchair <xliff:g example="15" id="current_major_version">%1$s</xliff:g> to Lawnchair <xliff:g example="16" id="next_major_version">%2$s</xliff:g>, please consider carefully as newer major version may be unstable than current version.</string>
<!--
Backup and restore
@@ -480,8 +478,6 @@
<string name="wallpaper_depth_effect_label">Wallpaper depth effect</string>
<string name="wallpaper_depth_effect_description">Zoom in and out of the wallpaper when transitioning between areas of the launcher</string>
<string name="show_sys_ui_scrim">Top shadow</string>
<string name="infinite_scrolling_label">Infinite scrolling</string>
<string name="infinite_scrolling_description">Swipe to loop between the first and last pages</string>
<string name="home_screen_grid">Home screen grid</string>
<string name="home_screen_lock">Lock home screen</string>
<string name="home_screen_unlock">Unlock home screen</string>
+1 -5
View File
@@ -327,7 +327,7 @@
<!-- Date formats -->
<string name="smartspace_calendar_gregorian">Gregoriánský</string>
<string name="smartspace_calendar_persian">Perský</string>
<string name="smartspace_calendar_chinese">Chinese</string>
<string name="smartspace_calendar_buddhist">Buddhist</string>
<string name="generic_smartspace_concatenated_desc">%1$s, %2$s</string>
<!-- Battery labels -->
<string name="smartspace_battery_fast_charging">Fast charging</string>
@@ -391,8 +391,6 @@
<string name="privacy_policy">Privacy policy</string>
<string name="contributor_status_active">Active</string>
<string name="update_check_failed">Failed to check for updates</string>
<string name="major_update_label">Breaking change!</string>
<string name="major_update_description">You are about to update from Lawnchair <xliff:g example="15" id="current_major_version">%1$s</xliff:g> to Lawnchair <xliff:g example="16" id="next_major_version">%2$s</xliff:g>, please consider carefully as newer major version may be unstable than current version.</string>
<!--
Backup and restore
@@ -480,8 +478,6 @@
<string name="wallpaper_depth_effect_label">Wallpaper depth effect</string>
<string name="wallpaper_depth_effect_description">Zoom in and out of the wallpaper when transitioning between areas of the launcher</string>
<string name="show_sys_ui_scrim">Top shadow</string>
<string name="infinite_scrolling_label">Infinite scrolling</string>
<string name="infinite_scrolling_description">Swipe to loop between the first and last pages</string>
<string name="home_screen_grid">Home screen grid</string>
<string name="home_screen_lock">Lock home screen</string>
<string name="home_screen_unlock">Unlock home screen</string>
+1 -5
View File
@@ -327,7 +327,7 @@
<!-- Date formats -->
<string name="smartspace_calendar_gregorian">Gregoriansk</string>
<string name="smartspace_calendar_persian">Persisk</string>
<string name="smartspace_calendar_chinese">Chinese</string>
<string name="smartspace_calendar_buddhist">Buddhist</string>
<string name="generic_smartspace_concatenated_desc">%1$s, %2$s</string>
<!-- Battery labels -->
<string name="smartspace_battery_fast_charging">Fast charging</string>
@@ -391,8 +391,6 @@
<string name="privacy_policy">Privacy policy</string>
<string name="contributor_status_active">Active</string>
<string name="update_check_failed">Failed to check for updates</string>
<string name="major_update_label">Breaking change!</string>
<string name="major_update_description">You are about to update from Lawnchair <xliff:g example="15" id="current_major_version">%1$s</xliff:g> to Lawnchair <xliff:g example="16" id="next_major_version">%2$s</xliff:g>, please consider carefully as newer major version may be unstable than current version.</string>
<!--
Backup and restore
@@ -480,8 +478,6 @@
<string name="wallpaper_depth_effect_label">Wallpaper depth effect</string>
<string name="wallpaper_depth_effect_description">Zoom in and out of the wallpaper when transitioning between areas of the launcher</string>
<string name="show_sys_ui_scrim">Top shadow</string>
<string name="infinite_scrolling_label">Infinite scrolling</string>
<string name="infinite_scrolling_description">Swipe to loop between the first and last pages</string>
<string name="home_screen_grid">Home screen grid</string>
<string name="home_screen_lock">Lock home screen</string>
<string name="home_screen_unlock">Unlock home screen</string>
+1 -5
View File
@@ -327,7 +327,7 @@
<!-- Date formats -->
<string name="smartspace_calendar_gregorian">Gregorianisch</string>
<string name="smartspace_calendar_persian">Persisch</string>
<string name="smartspace_calendar_chinese">Chinesisch</string>
<string name="smartspace_calendar_buddhist">Buddhistisch</string>
<string name="generic_smartspace_concatenated_desc">%1$s, %2$s</string>
<!-- Battery labels -->
<string name="smartspace_battery_fast_charging">Schnelles Laden</string>
@@ -391,8 +391,6 @@
<string name="privacy_policy">Datenschutzerklärung</string>
<string name="contributor_status_active">Aktiv</string>
<string name="update_check_failed">Fehler bei der Suche nach Updates</string>
<string name="major_update_label">Wichtige Änderung!</string>
<string name="major_update_description">Du aktualisierst gerade von Lawnchair <xliff:g example="15" id="current_major_version">%1$s</xliff:g> auf Lawnchair <xliff:g example="16" id="next_major_version">%2$s</xliff:g>. Beachte dabei, dass eine neue Hauptversion instabiler als die aktuelle Version sein kann.</string>
<!--
Backup and restore
@@ -480,8 +478,6 @@
<string name="wallpaper_depth_effect_label">Hintergrundbild-Tiefeneffekt</string>
<string name="wallpaper_depth_effect_description">Beim Wechsel der Launcher-Bereiche Bildschirmhintergrund herein- und herauszoomen</string>
<string name="show_sys_ui_scrim">Oberer Schatten</string>
<string name="infinite_scrolling_label">Infinite scrolling</string>
<string name="infinite_scrolling_description">Swipe to loop between the first and last pages</string>
<string name="home_screen_grid">Startbildschirm-Raster</string>
<string name="home_screen_lock">Startbildschirm sperren</string>
<string name="home_screen_unlock">Startbildschirm entsperren</string>
+1 -5
View File
@@ -327,7 +327,7 @@
<!-- Date formats -->
<string name="smartspace_calendar_gregorian">Γρηγοριανό</string>
<string name="smartspace_calendar_persian">Περσικό</string>
<string name="smartspace_calendar_chinese">Chinese</string>
<string name="smartspace_calendar_buddhist">Buddhist</string>
<string name="generic_smartspace_concatenated_desc">%1$s, %2$s</string>
<!-- Battery labels -->
<string name="smartspace_battery_fast_charging">Fast charging</string>
@@ -391,8 +391,6 @@
<string name="privacy_policy">Πολιτική απορρήτου</string>
<string name="contributor_status_active">Ενεργό</string>
<string name="update_check_failed">Αποτυχία ελέγχου ενημερώσεων</string>
<string name="major_update_label">Breaking change!</string>
<string name="major_update_description">You are about to update from Lawnchair <xliff:g example="15" id="current_major_version">%1$s</xliff:g> to Lawnchair <xliff:g example="16" id="next_major_version">%2$s</xliff:g>, please consider carefully as newer major version may be unstable than current version.</string>
<!--
Backup and restore
@@ -480,8 +478,6 @@
<string name="wallpaper_depth_effect_label">Εφέ βάθους ταπετσαρίας</string>
<string name="wallpaper_depth_effect_description">Μεγέθυνση και σμίκρυνση της ταπετσαρίας κατά τη μετάβαση μεταξύ περιοχών του εκκινητή</string>
<string name="show_sys_ui_scrim">Σκιά κορυφής</string>
<string name="infinite_scrolling_label">Infinite scrolling</string>
<string name="infinite_scrolling_description">Swipe to loop between the first and last pages</string>
<string name="home_screen_grid">Πλέγμα αρχικής οθόνης</string>
<string name="home_screen_lock">Κλείδωμα Αρχ. Οθ.</string>
<string name="home_screen_unlock">Ξεκλείδωμα Αρχ. Οθ.</string>
+1 -5
View File
@@ -327,7 +327,7 @@
<!-- Date formats -->
<string name="smartspace_calendar_gregorian">Gregorian</string>
<string name="smartspace_calendar_persian">Persian</string>
<string name="smartspace_calendar_chinese">Chinese</string>
<string name="smartspace_calendar_buddhist">Buddhist</string>
<string name="generic_smartspace_concatenated_desc">%1$s, %2$s</string>
<!-- Battery labels -->
<string name="smartspace_battery_fast_charging">Fast charging</string>
@@ -391,8 +391,6 @@
<string name="privacy_policy">Privacy policy</string>
<string name="contributor_status_active">Active</string>
<string name="update_check_failed">Failed to check for updates</string>
<string name="major_update_label">Breaking change!</string>
<string name="major_update_description">You are about to update from Lawnchair <xliff:g example="15" id="current_major_version">%1$s</xliff:g> to Lawnchair <xliff:g example="16" id="next_major_version">%2$s</xliff:g>, please consider carefully as newer major version may be unstable than current version.</string>
<!--
Backup and restore
@@ -480,8 +478,6 @@
<string name="wallpaper_depth_effect_label">Wallpaper depth effect</string>
<string name="wallpaper_depth_effect_description">Zoom in and out of the wallpaper when transitioning between areas of the launcher</string>
<string name="show_sys_ui_scrim">Top shadow</string>
<string name="infinite_scrolling_label">Infinite scrolling</string>
<string name="infinite_scrolling_description">Swipe to loop between the first and last pages</string>
<string name="home_screen_grid">Home screen grid</string>
<string name="home_screen_lock">Lock home screen</string>
<string name="home_screen_unlock">Unlock home screen</string>
+1 -5
View File
@@ -327,7 +327,7 @@
<!-- Date formats -->
<string name="smartspace_calendar_gregorian">Gregoriano</string>
<string name="smartspace_calendar_persian">Persa</string>
<string name="smartspace_calendar_chinese">Chinese</string>
<string name="smartspace_calendar_buddhist">Buddhist</string>
<string name="generic_smartspace_concatenated_desc">%1$s, %2$s</string>
<!-- Battery labels -->
<string name="smartspace_battery_fast_charging">Fast charging</string>
@@ -391,8 +391,6 @@
<string name="privacy_policy">Políticas de privacidad</string>
<string name="contributor_status_active">Activo</string>
<string name="update_check_failed">Error al buscar actualizaciones</string>
<string name="major_update_label">Breaking change!</string>
<string name="major_update_description">You are about to update from Lawnchair <xliff:g example="15" id="current_major_version">%1$s</xliff:g> to Lawnchair <xliff:g example="16" id="next_major_version">%2$s</xliff:g>, please consider carefully as newer major version may be unstable than current version.</string>
<!--
Backup and restore
@@ -480,8 +478,6 @@
<string name="wallpaper_depth_effect_label">Efecto de profundidad del fondo de pantalla</string>
<string name="wallpaper_depth_effect_description">Acerca y aleja el fondo de pantalla al cambiar entre áreas del lanzador</string>
<string name="show_sys_ui_scrim">Sombra en el borde superior</string>
<string name="infinite_scrolling_label">Infinite scrolling</string>
<string name="infinite_scrolling_description">Swipe to loop between the first and last pages</string>
<string name="home_screen_grid">Cuadrícula de la pantalla de inicio</string>
<string name="home_screen_lock">Bloquear pantalla de inicio</string>
<string name="home_screen_unlock">Desbloquear pantalla de inicio</string>
+1 -5
View File
@@ -327,7 +327,7 @@
<!-- Date formats -->
<string name="smartspace_calendar_gregorian">Gregoriuse</string>
<string name="smartspace_calendar_persian">Pärsia</string>
<string name="smartspace_calendar_chinese">Chinese</string>
<string name="smartspace_calendar_buddhist">Buddhist</string>
<string name="generic_smartspace_concatenated_desc">%1$s, %2$s</string>
<!-- Battery labels -->
<string name="smartspace_battery_fast_charging">Fast charging</string>
@@ -391,8 +391,6 @@
<string name="privacy_policy">Privaatsuspoliitika</string>
<string name="contributor_status_active">Aktiivne</string>
<string name="update_check_failed">Uuenduste kontrollimine nurjus</string>
<string name="major_update_label">Breaking change!</string>
<string name="major_update_description">You are about to update from Lawnchair <xliff:g example="15" id="current_major_version">%1$s</xliff:g> to Lawnchair <xliff:g example="16" id="next_major_version">%2$s</xliff:g>, please consider carefully as newer major version may be unstable than current version.</string>
<!--
Backup and restore
@@ -480,8 +478,6 @@
<string name="wallpaper_depth_effect_label">Taustapildi sügavuse efekt</string>
<string name="wallpaper_depth_effect_description">Käivitaja erinevate alade vahel liikumisel suumi taustapilti sisse ja välja</string>
<string name="show_sys_ui_scrim">Ülemine vari</string>
<string name="infinite_scrolling_label">Lõputu kerimine</string>
<string name="infinite_scrolling_description">Swipe to loop between the first and last pages</string>
<string name="home_screen_grid">Avakuva ruudustik</string>
<string name="home_screen_lock">Lukusta avakuva</string>
<string name="home_screen_unlock">Ava avakuva lukk</string>
+1 -5
View File
@@ -327,7 +327,7 @@
<!-- Date formats -->
<string name="smartspace_calendar_gregorian">میلادی</string>
<string name="smartspace_calendar_persian">شمسی</string>
<string name="smartspace_calendar_chinese">Chinese</string>
<string name="smartspace_calendar_buddhist">Buddhist</string>
<string name="generic_smartspace_concatenated_desc">%1$s، %2$s</string>
<!-- Battery labels -->
<string name="smartspace_battery_fast_charging">Fast charging</string>
@@ -391,8 +391,6 @@
<string name="privacy_policy">سیاست حفظ حریم خصوصی</string>
<string name="contributor_status_active">فعال</string>
<string name="update_check_failed">بررسی به‌روزرسانی‌ها ناموفق بود</string>
<string name="major_update_label">Breaking change!</string>
<string name="major_update_description">You are about to update from Lawnchair <xliff:g example="15" id="current_major_version">%1$s</xliff:g> to Lawnchair <xliff:g example="16" id="next_major_version">%2$s</xliff:g>, please consider carefully as newer major version may be unstable than current version.</string>
<!--
Backup and restore
@@ -480,8 +478,6 @@
<string name="wallpaper_depth_effect_label">افکت عمق تصویر زمینه</string>
<string name="wallpaper_depth_effect_description">هنگام انتقال بین حالت‌ها، تصویر زمینه بزرگ‌نمایی و کوچک‌نمایی شود</string>
<string name="show_sys_ui_scrim">سایه بالا</string>
<string name="infinite_scrolling_label">Infinite scrolling</string>
<string name="infinite_scrolling_description">Swipe to loop between the first and last pages</string>
<string name="home_screen_grid">جدول صفحه‌اصلی</string>
<string name="home_screen_lock">قفل صفحه اصلی</string>
<string name="home_screen_unlock">بازکردن قفل صفحه اصلی</string>
+1 -5
View File
@@ -327,7 +327,7 @@
<!-- Date formats -->
<string name="smartspace_calendar_gregorian">Gregorialainen</string>
<string name="smartspace_calendar_persian">Persialainen</string>
<string name="smartspace_calendar_chinese">Chinese</string>
<string name="smartspace_calendar_buddhist">Buddhist</string>
<string name="generic_smartspace_concatenated_desc">%1$s, %2$s</string>
<!-- Battery labels -->
<string name="smartspace_battery_fast_charging">Fast charging</string>
@@ -391,8 +391,6 @@
<string name="privacy_policy">Yksityisyyskäytäntö</string>
<string name="contributor_status_active">Aktiivinen</string>
<string name="update_check_failed">Päivitysten tarkistaminen epäonnistui</string>
<string name="major_update_label">Breaking change!</string>
<string name="major_update_description">You are about to update from Lawnchair <xliff:g example="15" id="current_major_version">%1$s</xliff:g> to Lawnchair <xliff:g example="16" id="next_major_version">%2$s</xliff:g>, please consider carefully as newer major version may be unstable than current version.</string>
<!--
Backup and restore
@@ -480,8 +478,6 @@
<string name="wallpaper_depth_effect_label">Taustakuvan syvyysefekti</string>
<string name="wallpaper_depth_effect_description">Zoomaa sisään ja ulos taustakuvasta aloitusnäytön eri osien välillä liikuttaessa</string>
<string name="show_sys_ui_scrim">Yläosan varjo</string>
<string name="infinite_scrolling_label">Infinite scrolling</string>
<string name="infinite_scrolling_description">Swipe to loop between the first and last pages</string>
<string name="home_screen_grid">Aloitusnäytön ruudukko</string>
<string name="home_screen_lock">Lukitse aloitusnäyttö</string>
<string name="home_screen_unlock">Poista aloitusnäytön lukitus</string>
+1 -5
View File
@@ -327,7 +327,7 @@
<!-- Date formats -->
<string name="smartspace_calendar_gregorian">Gregorian</string>
<string name="smartspace_calendar_persian">Persian</string>
<string name="smartspace_calendar_chinese">Chinese</string>
<string name="smartspace_calendar_buddhist">Buddhist</string>
<string name="generic_smartspace_concatenated_desc">%1$s, %2$s</string>
<!-- Battery labels -->
<string name="smartspace_battery_fast_charging">Fast charging</string>
@@ -391,8 +391,6 @@
<string name="privacy_policy">Privacy policy</string>
<string name="contributor_status_active">Aktibo</string>
<string name="update_check_failed">Failed to check for updates</string>
<string name="major_update_label">Breaking change!</string>
<string name="major_update_description">You are about to update from Lawnchair <xliff:g example="15" id="current_major_version">%1$s</xliff:g> to Lawnchair <xliff:g example="16" id="next_major_version">%2$s</xliff:g>, please consider carefully as newer major version may be unstable than current version.</string>
<!--
Backup and restore
@@ -480,8 +478,6 @@
<string name="wallpaper_depth_effect_label">Epekto ng lalim ng wallpaper</string>
<string name="wallpaper_depth_effect_description">Zoom in and out of the wallpaper when transitioning between areas of the launcher</string>
<string name="show_sys_ui_scrim">Top shadow</string>
<string name="infinite_scrolling_label">Infinite scrolling</string>
<string name="infinite_scrolling_description">Swipe to loop between the first and last pages</string>
<string name="home_screen_grid">Home screen grid</string>
<string name="home_screen_lock">Lock home screen</string>
<string name="home_screen_unlock">Unlock home screen</string>
Loaded 100 of 2258 files, more files were not shown because too many files have changed in this diff. Show more