diff --git a/.github/labeler.yml b/.github/labeler.yml
new file mode 100644
index 00000000000..e3f65ef6a5a
--- /dev/null
+++ b/.github/labeler.yml
@@ -0,0 +1,8 @@
+housekeeping:
+ - "*.md"
+ - .github/PULL_REQUEST_TEMPLATE/*.md
+ - .github/pull_request_template.md
+ - docs/**
+
+outdated:
+ - base-branch: '!16-dev'
diff --git a/.github/release.yml b/.github/release.yml
index 968b64dcc2f..d15e13133a6 100644
--- a/.github/release.yml
+++ b/.github/release.yml
@@ -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
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index ef32b63e951..c0eaf5a72cd 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -52,7 +52,7 @@ 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
with:
@@ -118,7 +118,8 @@ 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
diff --git a/.github/workflows/crowdin.yml b/.github/workflows/crowdin.yml
index 123e8e84350..043c6a8bdcd 100644
--- a/.github/workflows/crowdin.yml
+++ b/.github/workflows/crowdin.yml
@@ -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:
diff --git a/.github/workflows/crowdin_download.yml b/.github/workflows/crowdin_download.yml
index 19fe5136d67..ac393db7f42 100644
--- a/.github/workflows/crowdin_download.yml
+++ b/.github/workflows/crowdin_download.yml
@@ -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:
diff --git a/.github/workflows/crowdin_upload.yml b/.github/workflows/crowdin_upload.yml
index f85f0803060..83091af2a61 100644
--- a/.github/workflows/crowdin_upload.yml
+++ b/.github/workflows/crowdin_upload.yml
@@ -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:
diff --git a/.gitmodules b/.gitmodules
index cf7551ac413..f2284aca652 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,3 +1,4 @@
[submodule "platform_frameworks_libs_systemui"]
path = platform_frameworks_libs_systemui
url = https://github.com/LawnchairLauncher/platform_frameworks_libs_systemui
+ branch = 16-dev
diff --git a/Android.bp b/Android.bp
index eb033ee0daf..c71e8cf2d81 100644
--- a/Android.bp
+++ b/Android.bp
@@ -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,152 @@ 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",
+ ],
+}
+
+// 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",
+ "compose/tests/com/android/launcher3/widgetpicker/repository/WidgetsRepositoryImplTest.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 +215,132 @@ 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.material_material-icons-extended",
+ "androidx.compose.ui_ui-tooling-preview",
+ "androidx.compose.ui_ui-tooling",
+ "PlatformComposeCore",
+ ],
+
+ // 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 +350,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 +418,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 +430,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 +443,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 +456,9 @@ android_library {
lint: {
baseline_filename: "lint-baseline.xml",
},
+ flags_packages: [
+ "com_android_launcher3_flags",
+ ],
}
//
@@ -179,6 +466,10 @@ android_library {
//
android_app {
name: "Launcher3",
+ defaults: [
+ "launcher-non-platform-apis-defaults",
+ "launcher_compose_defaults",
+ ],
static_libs: [
"Launcher3ResLib",
@@ -190,7 +481,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 +489,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 +506,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 +522,39 @@ android_library {
"quickstep/res",
],
libs: [
- "framework-statsd",
+ "framework-statsd.stubs.module_lib",
],
static_libs: [
"Launcher3ResLib",
"lottie",
"SystemUISharedLib",
"SettingsLibSettingsTheme",
+ "dagger2",
+ "protolog-group",
+ "displaylib",
+ "com.android.window.flags.window-aconfig-java",
],
manifest: "quickstep/AndroidManifest.xml",
min_sdk_version: "current",
+ lint: {
+ disabled_checks: ["MissingClass"],
+ },
+ flags_packages: [
+ "com.android.window.flags.window-aconfig",
+ ],
}
// 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 +569,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 +581,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 +613,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 +643,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 +662,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 +677,7 @@ android_app {
optimize: {
proguard_flags_files: ["proguard.flags"],
enabled: true,
+ shrink_resources: true,
},
privileged: true,
@@ -372,9 +701,9 @@ android_app {
include_filter: ["com.android.launcher3.*"],
},
}
+
android_app {
name: "Launcher3QuickStepGo",
-
static_libs: ["Launcher3GoLib"],
resource_dirs: [],
@@ -385,6 +714,7 @@ android_app {
optimize: {
proguard_flags_files: ["proguard.flags"],
enabled: true,
+ shrink_resources: true,
},
privileged: true,
diff --git a/AndroidManifest-common.xml b/AndroidManifest-common.xml
index e8fa644e1fd..cb2a38c8824 100644
--- a/AndroidManifest-common.xml
+++ b/AndroidManifest-common.xml
@@ -50,24 +50,12 @@
+
+
+
+
+
When set to "true" in the result of startActivityForResult, the client that launched the + * picker knows that activity was closed due to pending drag. + */ + private static final String EXTRA_IS_PENDING_WIDGET_DRAG = "is_pending_widget_drag"; + + // Intent extras that specify the desired widget width and height. If these are not specified in + // the intent, then widgets will not be filtered for size. + private static final String EXTRA_DESIRED_WIDGET_WIDTH = "desired_widget_width"; + private static final String EXTRA_DESIRED_WIDGET_HEIGHT = "desired_widget_height"; + // Unlike the AppWidgetManager.EXTRA_CATEGORY_FILTER, this filter removes certain categories. + // Filter is ignore if it is not a negative value. + // Example usage: WIDGET_CATEGORY_HOME_SCREEN.inv() and WIDGET_CATEGORY_NOT_KEYGUARD.inv() + private static final String EXTRA_CATEGORY_EXCLUSION_FILTER = "category_exclusion_filter"; + /** + * Widgets currently added by the user in the UI surface. + *
This allows widget picker to exclude existing widgets from suggestions.
+ */ + private static final String EXTRA_ADDED_APP_WIDGETS = "added_app_widgets"; + /** + * Intent extra for the string representing the title displayed within the picker header. + */ + private static final String EXTRA_PICKER_TITLE = "picker_title"; + /** + * Intent extra for the string representing the description displayed within the picker header. + */ + private static final String EXTRA_PICKER_DESCRIPTION = "picker_description"; + + /** + * A unique identifier of the surface hosting the widgets; + *"widgets" is reserved for home screen surface.
+ *"widgets_hub" is reserved for lockscreen hub surface.
+ */ + private static final String EXTRA_UI_SURFACE = "ui_surface"; + private static final String LOCKSCREEN_WIDGETS_HUB_UI_SURFACE = "widgets_hub"; + private static final Pattern UI_SURFACE_PATTERN = + Pattern.compile("^(widgets|widgets_hub)$"); + /** + * User ids that should be filtered out of the widget lists created by this activity. + */ + private static final String EXTRA_USER_ID_FILTER = "filtered_user_ids"; + + private TISBindHelper mTISBindHelper; + private WidgetsModel mModel; + private StringCache mStringCache; + private WidgetPredictionsRequester mWidgetPredictionsRequester; + private WidgetPickerDataProvider mWidgetPickerDataProvider; + private int mDesiredWidgetWidth; + private int mDesiredWidgetHeight; + private WidgetCategoryFilter mWidgetCategoryInclusionFilter; + private WidgetCategoryFilter mWidgetCategoryExclusionFilter; + // Widgets existing on the host surface. + @NonNull + private ListWhen set to "true" in the result of startActivityForResult, the client that launched the - * picker knows that activity was closed due to pending drag. - */ - private static final String EXTRA_IS_PENDING_WIDGET_DRAG = "is_pending_widget_drag"; - - // Intent extras that specify the desired widget width and height. If these are not specified in - // the intent, then widgets will not be filtered for size. - private static final String EXTRA_DESIRED_WIDGET_WIDTH = "desired_widget_width"; - private static final String EXTRA_DESIRED_WIDGET_HEIGHT = "desired_widget_height"; - /** - * Widgets currently added by the user in the UI surface. - *
This allows widget picker to exclude existing widgets from suggestions.
- */ - private static final String EXTRA_ADDED_APP_WIDGETS = "added_app_widgets"; - /** - * A unique identifier of the surface hosting the widgets; - *"widgets" is reserved for home screen surface.
- *"widgets_hub" is reserved for glanceable hub surface.
- */ - private static final String EXTRA_UI_SURFACE = "ui_surface"; - private static final Pattern UI_SURFACE_PATTERN = - Pattern.compile("^(widgets|widgets_hub)$"); - private SimpleDragLayerThis class handles the complex logic of creating various animators, including launch,
+ * minimize, and trampoline close animations, based on the provided transition information and
+ * launch type. It also utilizes {@link InteractionJankMonitor} to monitor animation jank.
+ *
+ * @param context The application context.
+ * @param launchType The type of app launch, containing animation parameters.
+ * @param cujType The CUJ (Critical User Journey) type for jank monitoring.
+ */
+class DesktopAppLaunchAnimatorHelper(
+ private val context: Context,
+ private val displayController: DisplayController,
+ private val launchType: AppLaunchType,
+ @Cuj.CujType private val cujType: Int,
+ private val transactionSupplier: Supplier