From 5f3a03f4fbe9752dc4ffebce49cba7f431ee285a Mon Sep 17 00:00:00 2001
From: Abhishek Sharma <66074182+abhixv@users.noreply.github.com>
Date: Sat, 20 Dec 2025 03:26:30 +0530
Subject: [PATCH] feat: Add option to clear home screen in settings (#6125)
Signed-off-by: abhixv
---
.github/release.yml | 5 +-
.github/workflows/ci.yml | 5 +-
.github/workflows/crowdin.yml | 2 +-
.github/workflows/crowdin_download.yml | 2 +-
.github/workflows/crowdin_upload.yml | 2 +-
.gitmodules | 1 -
Android.bp | 307 +-
AndroidManifest-common.xml | 8 +-
AndroidManifest.xml | 1 -
CONTRIBUTING.md | 73 +-
GITHUB_CHANGELOG.md | 378 +-
OWNERS | 38 +-
PREUPLOAD.cfg | 3 +-
README.md | 54 +-
SECURITY.md | 3 +-
TELEGRAM_CHANGELOG.txt | 199 +-
aconfig/launcher.aconfig | 432 +-
androidx-lib/build.gradle | 2 +-
baseline-profile/build.gradle | 12 +-
.../baseline/BaselineProfileGenerator.kt | 4 -
build.gradle | 63 +-
compatLib/README.md | 27 +-
compatLib/build.gradle | 1 -
docs/assets/README.md | 22 +-
.../images/phoneScreenshots/device-frame.jpg | Bin 39464 -> 35920 bytes
.../android/en-US/short_description.txt | 2 +-
flags/build.gradle | 2 +-
.../android/launcher3/CustomFeatureFlags.java | 895 +-
.../launcher3/FakeFeatureFlagsImpl.java | 1 +
.../com/android/launcher3/FeatureFlags.java | 247 +-
.../android/launcher3/FeatureFlagsImpl.java | 1269 +-
flags/src/com/android/launcher3/Flags.java | 621 +-
.../quickstep/util/DeviceConfigHelper.kt | 62 +-
.../android/systemui/CustomFeatureFlags.java | 2301 +-
.../systemui/FakeFeatureFlagsImpl.java | 1 +
.../com/android/systemui/FeatureFlags.java | 1208 +-
.../android/systemui/FeatureFlagsImpl.java | 3971 +-
flags/src/com/android/systemui/Flags.java | 2219 +-
.../systemui/shared/CustomFeatureFlags.java | 218 +-
.../systemui/shared/FakeFeatureFlagsImpl.java | 1 +
.../android/systemui/shared/FeatureFlags.java | 103 +-
.../systemui/shared/FeatureFlagsImpl.java | 299 +-
.../com/android/systemui/shared/Flags.java | 200 +-
.../window/flags2/CustomFeatureFlags.java | 2405 +-
.../window/flags2/FakeFeatureFlagsImpl.java | 1 +
.../android/window/flags2/FeatureFlags.java | 1130 +-
.../window/flags2/FeatureFlagsImpl.java | 2656 +-
.../src/com/android/window/flags2/Flags.java | 2208 +-
.../android/wm/shell/CustomFeatureFlags.java | 261 +-
.../wm/shell/FakeFeatureFlagsImpl.java | 1 +
.../com/android/wm/shell/FeatureFlags.java | 140 +-
.../android/wm/shell/FeatureFlagsImpl.java | 457 +-
flags/src/com/android/wm/shell/Flags.java | 244 +-
go/AndroidManifest-launcher.xml | 1 -
go/quickstep/res/values-af/strings.xml | 6 +-
go/quickstep/res/values-be/strings.xml | 2 +-
go/quickstep/res/values-fa/strings.xml | 2 +-
go/quickstep/res/values-iw/strings.xml | 4 +-
go/quickstep/res/values-ne/strings.xml | 6 +-
go/quickstep/res/values/styles.xml | 2 +-
.../src/com/android/launcher3/AppSharing.java | 17 +-
.../quickstep/TaskOverlayFactoryGo.java | 10 +-
gradle.properties | 12 +-
gradle/libs.versions.toml | 21 +-
lawnchair/assets/google_fonts.json | 47237 +++++++++++++++-
lawnchair/res/color/widgets_picker_scrim.xml | 2 +-
lawnchair/res/drawable/ic_about.xml | 18 +-
lawnchair/res/drawable/ic_back.xml | 16 +-
.../res/drawable/ic_bug_notification.xml | 29 +-
lawnchair/res/drawable/ic_charging.xml | 14 +-
lawnchair/res/drawable/ic_dock.xml | 15 +-
lawnchair/res/drawable/ic_edit.xml | 13 +-
lawnchair/res/drawable/ic_folder.xml | 14 +-
lawnchair/res/drawable/ic_home_screen.xml | 13 +-
lawnchair/res/drawable/ic_pr_lock.xml | 4 +-
lawnchair/res/drawable/ic_quickstep.xml | 8 +-
lawnchair/res/drawable/ic_warning.xml | 21 +-
lawnchair/res/drawable/ic_work_app_badge.xml | 42 +
lawnchair/res/font/inter_bold.ttf | Bin 0 -> 293448 bytes
lawnchair/res/font/inter_medium.ttf | Bin 0 -> 292140 bytes
lawnchair/res/font/inter_regular.ttf | Bin 0 -> 287928 bytes
lawnchair/res/font/inter_semi_bold.ttf | Bin 0 -> 293028 bytes
.../layout/all_apps_folder_application.xml | 5 +-
lawnchair/res/layout/all_apps_folder_icon.xml | 4 +-
.../widgets_two_pane_sheet_paged_view.xml | 58 +-
.../widgets_two_pane_sheet_recyclerview.xml | 104 +-
lawnchair/res/layout/work_apps_edu.xml | 59 +-
lawnchair/res/values/config.xml | 2 +-
lawnchair/res/values/dimens.xml | 4 +-
lawnchair/res/values/strings.xml | 60 +-
lawnchair/res/xml/device_profiles.xml | 17 +-
lawnchair/src/app/lawnchair/BlankActivity.kt | 14 +-
.../app/lawnchair/DeviceProfileOverrides.kt | 13 +-
.../app/lawnchair/HeadlessWidgetsManager.kt | 17 +-
.../lawnchair/LauncherActivityCachingLogic.kt | 23 +
lawnchair/src/app/lawnchair/LawnchairApp.kt | 6 -
.../src/app/lawnchair/LawnchairLauncher.kt | 46 +-
.../lawnchair/LawnchairProcessInitializer.kt | 5 +-
.../src/app/lawnchair/NotificationManager.kt | 13 +-
.../app/lawnchair/SearchBarStateHandler.kt | 80 +-
.../allapps/LawnchairAlphabeticalAppsList.kt | 5 +-
.../allapps/views/SearchContainerView.kt | 6 +-
.../allapps/views/SearchResultIcon.kt | 12 +-
.../data/folder/service/FolderService.kt | 15 +-
.../iconoverride/IconOverrideRepository.kt | 28 +-
.../wallpaper/service/WallpaperService.kt | 13 +-
.../lawnchair/deck/AddFoldersWithItemsTask.kt | 15 +-
.../factory/LawnchairWidgetHolder.kt | 58 +-
lawnchair/src/app/lawnchair/font/FontCache.kt | 21 +-
.../src/app/lawnchair/font/FontManager.kt | 13 +-
.../font/googlefonts/GoogleFontsListing.kt | 13 +-
.../gestures/config/GestureHandlerConfig.kt | 6 -
.../gestures/config/GestureHandlerOption.kt | 1 -
.../handlers/OpenNotificationsHandler.kt | 20 +-
.../handlers/RecentsGestureHandler.kt | 23 +-
.../gestures/handlers/SleepGestureHandler.kt | 67 +-
.../app/lawnchair/icons/IconPackProvider.kt | 54 +-
.../lawnchair/icons/LawnchairIconProvider.kt | 236 +-
.../app/lawnchair/icons/shape/IconShape.kt | 122 +-
.../lawnchair/icons/shape/IconShapeManager.kt | 17 +-
.../nexuslauncher/OverlayCallbackImpl.kt | 18 +-
.../nexuslauncher/ThemedSmartSpaceHostView.kt | 2 +-
.../app/lawnchair/override/CustomizeDialog.kt | 14 +-
.../overview/TaskOverlayFactoryImpl.kt | 61 +-
.../preferences/BasePreferenceManager.kt | 4 +-
.../preferences/PreferenceManager.kt | 39 +-
.../preferences2/PreferenceManager2.kt | 37 +-
.../lawnchair/preferences2/ReloadHelper.kt | 6 +-
.../src/app/lawnchair/qsb/providers/Google.kt | 9 -
.../search/adapter/SearchTargetCompat.kt | 7 +-
.../smartspace/DoubleShadowTextView.kt | 45 +-
.../lawnchair/smartspace/IcuDateTextView.kt | 60 +-
.../smartspace/SmartspaceViewContainer.kt | 3 +-
.../smartspace/model/SmartspaceCalendar.kt | 8 +-
.../smartspace/model/SmartspaceTarget.kt | 18 -
.../provider/BatteryStatusProvider.kt | 62 +-
.../smartspace/provider/SmartspaceProvider.kt | 13 +-
.../src/app/lawnchair/theme/ThemeProvider.kt | 13 +-
.../theme/color/tokens/ColorTokens.kt | 71 +-
.../theme/drawable/DrawableTokens.kt | 2 +-
.../ui/popup/LauncherOptionsPopup.kt | 21 -
.../lawnchair/ui/popup/LawnchairShortcut.kt | 39 +-
.../lawnchair/ui/preferences/about/About.kt | 27 +-
.../ui/preferences/about/AboutModels.kt | 3 -
.../ui/preferences/about/AboutViewModel.kt | 16 +-
.../ui/preferences/about/ChangesDialog.kt | 6 +-
.../about/NightlyBuildsRepository.kt | 26 +-
.../ui/preferences/about/UpdateSection.kt | 57 +-
.../components/AnnouncementPreference.kt | 17 +-
.../components/DraggablePreference.kt | 103 +-
.../components/GestureHandlerPreference.kt | 9 +-
.../components/PermissionDialog.kt | 21 +-
.../components/SuggestionsPreference.kt | 30 +-
.../components/WallpaperPreview.kt | 4 -
.../ColorPreferenceModelList.kt | 13 +-
.../ColorSelectionPreference.kt | 4 -
.../colorpreference/pickers/PresetsList.kt | 10 +-
.../colorpreference/pickers/SwatchGrid.kt | 49 +-
.../controls/ClickablePreference.kt | 5 -
.../components/controls/ListPreference.kt | 8 +-
.../controls/MainSwitchPreference.kt | 24 +-
.../components/controls/PreferenceCategory.kt | 9 -
.../components/controls/SliderPreference.kt | 2 +-
.../components/controls/SwitchPreference.kt | 21 -
.../components/controls/TextPreference.kt | 5 -
.../components/layout/ClickableIcon.kt | 12 +-
.../components/layout/DividerColumn.kt | 10 +-
.../layout/LazyColumnPreferenceGroup.kt | 36 +-
.../components/layout/LoadingScreen.kt | 14 +-
.../components/layout/PreferenceGroup.kt | 144 +-
.../preferences/components/layout/TopBar.kt | 43 +-
.../search/DockSearchPreferences.kt | 95 +-
.../search/DrawerSearchPreferences.kt | 73 +-
.../components/search/FileSearchProvider.kt | 49 +-
.../search/SearchProviderPreference.kt | 147 +-
.../components/search/WebSearchProvider.kt | 5 -
.../data/liveinfo/LiveInformationManager.kt | 14 +-
.../AppDrawerFoldersPreference.kt | 90 +-
.../destinations/AppDrawerPreferences.kt | 191 +-
.../destinations/CustomIconShapePreference.kt | 146 +-
.../destinations/DebugMenuPreferences.kt | 133 +-
.../destinations/DockPreferences.kt | 84 +-
.../ExperimentalFeaturesPreferences.kt | 227 +-
.../destinations/FeatureFlagsPreference.kt | 4 +-
.../destinations/FolderPreferences.kt | 80 +-
.../destinations/FontSelectionPreference.kt | 19 +-
.../destinations/GeneralPreferences.kt | 190 +-
.../destinations/GesturePreferences.kt | 50 +-
.../destinations/HiddenAppsPreferences.kt | 117 +-
.../destinations/HomeScreenGridPreferences.kt | 32 +-
.../destinations/HomeScreenPreferences.kt | 254 +-
.../destinations/IconPackPreferences.kt | 62 +-
.../destinations/IconShapePreference.kt | 54 +-
.../destinations/PickAppForGesture.kt | 1 +
.../destinations/PreferencesDashboard.kt | 388 +-
.../destinations/QuickstepPreferences.kt | 43 +-
.../destinations/SearchPreferences.kt | 2 +-
.../destinations/SearchProviderPreferences.kt | 76 +-
.../destinations/SelectAppsForDrawerFolder.kt | 13 +-
.../destinations/SelectIconPreference.kt | 6 +-
.../destinations/SmartspacePreferences.kt | 160 +-
lawnchair/src/app/lawnchair/ui/theme/Shape.kt | 5 -
lawnchair/src/app/lawnchair/ui/theme/Theme.kt | 22 +-
lawnchair/src/app/lawnchair/ui/theme/Type.kt | 59 +-
.../ui/util/ProvideBottomSheetHandler.kt | 74 +-
.../PreferenceGroupPreviewContainer.kt | 3 +-
lawnchair/src/app/lawnchair/util/AppsList.kt | 3 +-
.../src/app/lawnchair/util/Compatibility.kt | 49 -
.../src/app/lawnchair/util/LawnchairUtils.kt | 98 -
.../util/LawnchairWindowManagerProxy.kt | 35 +-
.../util/MainThreadInitializedObject.java | 48 +-
.../util/PackageManagerExtensions.kt | 2 +-
.../src/app/lawnchair/util/RecentHelper.kt | 11 +-
.../src/app/lawnchair/util/WallpaperUtils.kt | 20 +-
.../app/lawnchair/views/ComposeBottomSheet.kt | 2 +-
.../lawnchair/views/LauncherPreviewView.kt | 15 +-
.../views/LawnchairFloatingSurfaceView.kt | 33 +-
prebuilts/libs/README.md | 27 +-
proguard.flags | 23 +-
protos/launcher_atom.proto | 16 -
quickstep/Android.bp | 19 +-
quickstep/AndroidManifest-launcher.xml | 3 +-
quickstep/AndroidManifest.xml | 6 +-
quickstep/res/color/all_set_bg_primary.xml | 2 +-
quickstep/res/color/all_set_bg_tertiary.xml | 2 +-
.../color/bubblebar_drop_target_bg_color.xml | 4 +-
.../res/color/menu_item_hover_state_color.xml | 4 +-
.../drawable/bg_bubble_bar_drop_target.xml | 2 +-
.../res/drawable/bg_bubble_dismiss_circle.xml | 27 +
.../bg_bubble_expanded_view_drop_target.xml | 2 +-
quickstep/res/drawable/bg_circle.xml | 20 +
.../drawable/bg_floating_desktop_select.xml | 2 +-
.../drawable/bg_overview_clear_all_button.xml | 9 +-
.../res/drawable/bg_taskbar_edu_tooltip.xml | 3 +-
quickstep/res/drawable/bg_wellbeing_toast.xml | 2 +-
.../drawable/button_taskbar_edu_bordered.xml | 5 +-
.../res/drawable/ic_bubble_dismiss_white.xml | 25 +
quickstep/res/drawable/ic_chevron_down.xml | 2 +-
quickstep/res/drawable/ic_desktop.xml | 25 +-
quickstep/res/drawable/ic_hourglass_top.xml | 19 +-
.../drawable/ic_save_app_pair_left_right.xml | 47 +-
.../res/drawable/ic_save_app_pair_up_down.xml | 49 +-
...uick_switch_overview_button_background.xml | 21 +
.../res/drawable/rotate_tutorial_warning.xml | 2 +-
.../split_instructions_background.xml | 2 +-
.../keyboard_quick_switch_taskview.xml | 17 +-
.../gesture_tutorial_step_menu.xml | 276 +-
quickstep/res/layout/activity_allset.xml | 7 +-
.../res/layout/digital_wellbeing_toast.xml | 7 +-
.../res/layout/floating_header_content.xml | 2 +-
.../res/layout/gesture_tutorial_fragment.xml | 10 +
.../res/layout/gesture_tutorial_step_menu.xml | 35 +-
quickstep/res/layout/icon_app_chip_view.xml | 11 +-
.../layout/keyboard_quick_switch_taskview.xml | 17 +-
...eyboard_quick_switch_textonly_taskview.xml | 64 +
.../res/layout/keyboard_quick_switch_view.xml | 49 +-
.../res/layout/overview_clear_all_button.xml | 7 +-
.../redesigned_gesture_tutorial_fragment.xml | 15 +-
.../res/layout/split_instructions_view.xml | 22 +-
quickstep/res/layout/task.xml | 14 +-
quickstep/res/layout/task_desktop.xml | 48 +-
quickstep/res/layout/task_grouped.xml | 26 +-
quickstep/res/layout/task_menu.xml | 8 +-
quickstep/res/layout/task_thumbnail.xml | 43 +-
.../res/layout/task_view_menu_option.xml | 10 +-
quickstep/res/layout/taskbar.xml | 19 -
.../res/layout/taskbar_all_apps_sheet.xml | 6 +-
quickstep/res/layout/taskbar_divider.xml | 14 +-
.../res/layout/taskbar_divider_popup_menu.xml | 2 +-
quickstep/res/layout/taskbar_edu_features.xml | 10 +-
quickstep/res/layout/taskbar_edu_pinning.xml | 4 +-
quickstep/res/layout/taskbar_edu_search.xml | 4 +-
quickstep/res/layout/taskbar_edu_swipe.xml | 4 +-
quickstep/res/layout/transient_taskbar.xml | 30 +-
quickstep/res/raw-h480dp/all_set_page_bg.json | 1 +
quickstep/res/raw-land/all_set_page_bg.json | 1 +
.../res/raw-sw600dp-land/all_set_page_bg.json | 1 +
.../res/raw-sw600dp/all_set_page_bg.json | 1 +
.../res/raw-sw720dp-land/all_set_page_bg.json | 1 +
.../res/raw-sw720dp/all_set_page_bg.json | 1 +
.../raw-w840dp-h480dp/all_set_page_bg.json | 2 +-
quickstep/res/values-af/strings.xml | 43 +-
quickstep/res/values-am/strings.xml | 35 +-
quickstep/res/values-ar/strings.xml | 37 +-
quickstep/res/values-as/strings.xml | 35 +-
quickstep/res/values-az/strings.xml | 37 +-
quickstep/res/values-b+sr+Latn/strings.xml | 43 +-
quickstep/res/values-be/strings.xml | 41 +-
quickstep/res/values-bg/strings.xml | 37 +-
quickstep/res/values-bn/strings.xml | 41 +-
quickstep/res/values-bs/strings.xml | 43 +-
quickstep/res/values-ca/strings.xml | 41 +-
quickstep/res/values-cs/strings.xml | 49 +-
quickstep/res/values-da/strings.xml | 45 +-
quickstep/res/values-de/strings.xml | 47 +-
quickstep/res/values-el/strings.xml | 39 +-
quickstep/res/values-en-rAU/strings.xml | 35 +-
quickstep/res/values-en-rCA/strings.xml | 35 +-
quickstep/res/values-en-rGB/strings.xml | 35 +-
quickstep/res/values-en-rIN/strings.xml | 35 +-
quickstep/res/values-en-rXC/strings.xml | 16 +-
quickstep/res/values-es-rUS/strings.xml | 47 +-
quickstep/res/values-es/strings.xml | 41 +-
quickstep/res/values-et/strings.xml | 45 +-
quickstep/res/values-eu/strings.xml | 39 +-
quickstep/res/values-fa/strings.xml | 39 +-
quickstep/res/values-fi/strings.xml | 37 +-
quickstep/res/values-fr-rCA/strings.xml | 45 +-
quickstep/res/values-fr/strings.xml | 47 +-
quickstep/res/values-gl/strings.xml | 41 +-
quickstep/res/values-gu/strings.xml | 35 +-
quickstep/res/values-hi/strings.xml | 37 +-
quickstep/res/values-hr/strings.xml | 55 +-
quickstep/res/values-hu/strings.xml | 45 +-
quickstep/res/values-hy/strings.xml | 35 +-
quickstep/res/values-in/strings.xml | 45 +-
quickstep/res/values-is/strings.xml | 39 +-
quickstep/res/values-it/strings.xml | 37 +-
quickstep/res/values-iw/strings.xml | 51 +-
quickstep/res/values-ja/strings.xml | 41 +-
quickstep/res/values-ka/strings.xml | 35 +-
quickstep/res/values-kk/strings.xml | 35 +-
quickstep/res/values-km/strings.xml | 37 +-
quickstep/res/values-kn/strings.xml | 43 +-
quickstep/res/values-ko/strings.xml | 37 +-
quickstep/res/values-ky/strings.xml | 39 +-
quickstep/res/values-lo/strings.xml | 37 +-
quickstep/res/values-lt/strings.xml | 37 +-
quickstep/res/values-lv/strings.xml | 37 +-
quickstep/res/values-mk/strings.xml | 41 +-
quickstep/res/values-ml/strings.xml | 35 +-
quickstep/res/values-mn/strings.xml | 35 +-
quickstep/res/values-mr/strings.xml | 35 +-
quickstep/res/values-ms/strings.xml | 45 +-
quickstep/res/values-my/strings.xml | 39 +-
quickstep/res/values-nb/strings.xml | 37 +-
quickstep/res/values-ne/strings.xml | 45 +-
quickstep/res/values-night/colors.xml | 8 +-
quickstep/res/values-night/styles.xml | 31 +-
quickstep/res/values-nl/strings.xml | 37 +-
quickstep/res/values-or/strings.xml | 45 +-
quickstep/res/values-pa/strings.xml | 39 +-
quickstep/res/values-pl/strings.xml | 37 +-
quickstep/res/values-pt-rPT/strings.xml | 49 +-
quickstep/res/values-pt/strings.xml | 45 +-
quickstep/res/values-ro/strings.xml | 37 +-
quickstep/res/values-ru/strings.xml | 41 +-
quickstep/res/values-si/strings.xml | 35 +-
quickstep/res/values-sk/strings.xml | 55 +-
quickstep/res/values-sl/strings.xml | 35 +-
quickstep/res/values-sq/strings.xml | 35 +-
quickstep/res/values-sr/strings.xml | 43 +-
quickstep/res/values-sv/strings.xml | 37 +-
quickstep/res/values-sw/strings.xml | 47 +-
quickstep/res/values-sw600dp-land/dimens.xml | 8 +-
quickstep/res/values-sw600dp/dimens.xml | 11 +-
quickstep/res/values-ta/strings.xml | 39 +-
quickstep/res/values-te/strings.xml | 37 +-
quickstep/res/values-th/strings.xml | 51 +-
quickstep/res/values-tl/strings.xml | 35 +-
quickstep/res/values-tr/strings.xml | 39 +-
quickstep/res/values-uk/strings.xml | 39 +-
quickstep/res/values-ur/strings.xml | 35 +-
quickstep/res/values-uz/strings.xml | 37 +-
quickstep/res/values-vi/strings.xml | 39 +-
quickstep/res/values-zh-rCN/strings.xml | 43 +-
quickstep/res/values-zh-rHK/strings.xml | 35 +-
quickstep/res/values-zh-rTW/strings.xml | 37 +-
quickstep/res/values-zu/strings.xml | 35 +-
quickstep/res/values/attrs.xml | 6 -
quickstep/res/values/colors.xml | 11 +-
quickstep/res/values/config.xml | 15 +-
quickstep/res/values/dimens.xml | 85 +-
quickstep/res/values/strings.xml | 88 +-
quickstep/res/values/styles.xml | 56 +-
.../launcher3/LauncherAnimationRunner.java | 5 +-
.../launcher3/LauncherInitListener.java | 8 +-
.../QuickstepAccessibilityDelegate.java | 62 -
.../launcher3/QuickstepTransitionManager.java | 757 +-
.../launcher3/WidgetPickerActivity.java | 366 +-
.../appprediction/AppsDividerView.java | 12 +-
.../appprediction/PredictionRowView.java | 25 +-
.../DesktopRecentsTransitionController.kt | 90 +-
.../HotseatPredictionController.java | 9 +-
.../hybridhotseat/HotseatPredictionModel.java | 23 +-
.../launcher3/model/PredictionUpdateTask.java | 16 +-
.../model/QuickstepModelDelegate.java | 191 +-
.../launcher3/model/WellbeingModel.java | 34 +-
.../model/WidgetPredictionsRequester.java | 161 +-
.../model/WidgetsPredictionUpdateTask.java | 89 +-
.../launcher3/proxy/ProxyActivityStarter.java | 1 -
.../statehandlers/DepthController.java | 117 +-
.../launcher3/taskbar/BaseTaskbarContext.java | 68 +-
.../taskbar/FallbackTaskbarUIController.java | 71 +-
.../KeyboardQuickSwitchController.java | 313 +-
.../taskbar/KeyboardQuickSwitchTaskView.java | 175 +-
.../taskbar/KeyboardQuickSwitchView.java | 444 +-
.../KeyboardQuickSwitchViewController.java | 235 +-
.../taskbar/LauncherTaskbarUIController.java | 381 +-
.../taskbar/NavbarButtonsViewController.java | 773 +-
.../launcher3/taskbar/StashedHandleView.java | 5 -
.../taskbar/StashedHandleViewController.java | 23 +-
.../taskbar/TaskbarActivityContext.java | 1114 +-
.../TaskbarAutohideSuspendController.java | 10 -
.../taskbar/TaskbarBackgroundRenderer.kt | 45 +-
.../launcher3/taskbar/TaskbarControllers.java | 61 +-
.../taskbar/TaskbarDividerPopupView.kt | 93 +-
.../taskbar/TaskbarDragController.java | 164 +-
.../launcher3/taskbar/TaskbarDragLayer.java | 34 +-
.../taskbar/TaskbarDragLayerController.java | 80 +-
.../launcher3/taskbar/TaskbarEduTooltip.kt | 18 +-
.../taskbar/TaskbarEduTooltipController.kt | 121 +-
...askbarForceVisibleImmersiveController.java | 9 +-
.../TaskbarHoverToolTipController.java | 100 +-
.../taskbar/TaskbarInsetsController.kt | 139 +-
.../TaskbarLauncherStateController.java | 491 +-
.../launcher3/taskbar/TaskbarManager.java | 1644 +-
.../taskbar/TaskbarModelCallbacks.java | 107 +-
.../taskbar/TaskbarNavButtonController.java | 122 +-
.../taskbar/TaskbarPinningController.kt | 37 +-
.../taskbar/TaskbarPopupController.java | 220 +-
.../taskbar/TaskbarRecentAppsController.kt | 452 +-
.../taskbar/TaskbarScrimViewController.java | 51 +-
.../launcher3/taskbar/TaskbarSharedState.java | 25 +-
...kbarShortcutMenuAccessibilityDelegate.java | 28 +-
.../TaskbarSpringOnStashController.java | 3 +-
.../taskbar/TaskbarStashController.java | 348 +-
.../taskbar/TaskbarStashViaTouchController.kt | 7 +-
.../taskbar/TaskbarThresholdUtils.java | 5 +
.../taskbar/TaskbarTranslationController.java | 6 +-
.../taskbar/TaskbarUIController.java | 225 +-
.../launcher3/taskbar/TaskbarView.java | 891 +-
.../taskbar/TaskbarViewCallbacks.java | 162 +-
.../taskbar/TaskbarViewCallbacksFactory.kt | 34 +-
.../taskbar/TaskbarViewController.java | 718 +-
.../VoiceInteractionWindowController.kt | 11 +-
.../allapps/TaskbarAllAppsContainerView.java | 25 +
.../allapps/TaskbarAllAppsController.java | 66 +-
...TaskbarAllAppsFallbackSearchContainer.java | 54 +
.../allapps/TaskbarAllAppsSlideInView.java | 98 +-
.../allapps/TaskbarAllAppsViewController.java | 5 +-
.../allapps/TaskbarSearchSessionController.kt | 10 +-
.../taskbar/bubbles/BubbleBarBackground.kt | 99 +-
.../taskbar/bubbles/BubbleBarController.java | 653 +-
.../taskbar/bubbles/BubbleBarItem.kt | 14 +-
.../taskbar/bubbles/BubbleBarPinController.kt | 14 +-
.../taskbar/bubbles/BubbleBarView.java | 1254 +-
.../bubbles/BubbleBarViewController.java | 1172 +-
.../taskbar/bubbles/BubbleControllers.java | 77 +-
.../bubbles/BubbleDismissController.java | 8 +-
.../taskbar/bubbles/BubbleDismissViewExt.kt | 9 +-
.../taskbar/bubbles/BubbleDragAnimator.java | 50 +-
.../taskbar/bubbles/BubbleDragController.java | 236 +-
.../taskbar/bubbles/BubblePinController.kt | 5 +-
.../BubbleStashedHandleViewController.java | 199 +-
.../launcher3/taskbar/bubbles/BubbleView.java | 382 +-
.../animation/BubbleBarViewAnimator.kt | 553 +-
.../taskbar/customization/TaskbarContainer.kt | 16 +-
.../customization/TaskbarFeatureEvaluator.kt | 43 +-
.../taskbar/customization/TaskbarIconSpecs.kt | 32 +-
.../customization/TaskbarSpecsEvaluator.kt | 64 +-
.../navbutton/AbstractNavButtonLayoutter.kt | 29 +-
.../navbutton/NavButtonLayoutFactory.kt | 39 +-
.../taskbar/navbutton/NearestTouchFrame.java | 1 -
.../navbutton/PhoneGestureLayoutter.kt | 31 +-
.../taskbar/navbutton/SetupNavLayoutter.kt | 32 +-
.../overlay/TaskbarOverlayContext.java | 52 +-
.../overlay/TaskbarOverlayController.java | 99 +-
.../overlay/TaskbarOverlayDragLayer.java | 15 +-
.../BaseRecentsViewStateController.java | 161 +
.../uioverrides/PredictedAppIcon.java | 358 +-
.../uioverrides/QuickstepAppWidgetHost.java | 74 +
.../QuickstepInteractionHandler.java | 51 +-
.../uioverrides/QuickstepLauncher.java | 523 +-
.../uioverrides/QuickstepWidgetHolder.java | 136 +-
.../RecentsViewStateController.java | 185 +
.../launcher3/uioverrides/SystemApiWrapper.kt | 38 +-
.../uioverrides/flags/DevOptionsUiHelper.kt | 139 +-
.../plugins/PluginManagerWrapperImpl.java | 23 +-
.../uioverrides/states/AllAppsState.java | 47 +-
.../states/BackgroundAppState.java | 24 +-
.../states/OverviewModalTaskState.java | 13 +-
.../uioverrides/states/OverviewState.java | 47 +-
.../uioverrides/states/QuickSwitchState.java | 3 +-
.../QuickstepAtomicAnimationFactory.java | 36 +-
.../states/SplitScreenSelectState.java | 10 +-
.../NavBarToHomeTouchController.java | 9 +-
...ButtonNavbarToOverviewTouchController.java | 19 +-
.../NoButtonQuickSwitchTouchController.java | 72 +-
.../PortraitOverviewStateTouchHelper.java | 4 +-
.../PortraitStatesTouchController.java | 26 +-
.../QuickSwitchTouchController.java | 6 +-
.../StatusBarTouchController.java | 59 +-
.../TaskViewTouchController.java | 395 +
.../android/quickstep/AbsSwipeUpHandler.java | 778 +-
.../android/quickstep/AllAppsActionManager.kt | 37 +-
.../quickstep/BaseActivityInterface.java | 90 +-
.../quickstep/BaseContainerInterface.java | 134 +-
.../com/android/quickstep/BinderTracker.java | 32 +-
.../quickstep/DesktopSystemShortcut.kt | 55 +-
.../android/quickstep/DeviceConfigWrapper.kt | 35 +-
.../quickstep/FallbackActivityInterface.java | 43 +-
.../quickstep/FallbackSwipeHandler.java | 33 +-
.../com/android/quickstep/GestureState.java | 166 +-
.../android/quickstep/HomeVisibilityState.kt | 22 +-
.../com/android/quickstep/InputConsumer.java | 86 +-
.../quickstep/LauncherActivityInterface.java | 93 +-
.../LauncherBackAnimationController.java | 226 +-
.../LauncherRestoreEventLoggerImpl.kt | 1 -
.../quickstep/LauncherSwipeHandlerV2.java | 42 +-
.../android/quickstep/MultiStateCallback.java | 8 +-
.../android/quickstep/OrientationRectF.java | 4 +-
.../OrientationTouchTransformer.java | 56 +-
.../quickstep/OverviewCommandHelper.java | 525 +
.../quickstep/OverviewComponentObserver.java | 165 +-
.../QuickstepProcessInitializer.java | 65 +-
.../android/quickstep/RecentTasksList.java | 441 +-
.../android/quickstep/RecentsActivity.java | 143 +-
.../quickstep/RecentsAnimationCallbacks.java | 102 +-
.../quickstep/RecentsAnimationController.java | 115 +-
.../RecentsAnimationDeviceState.java | 345 +-
.../quickstep/RecentsAnimationTargets.java | 13 +-
.../android/quickstep/RecentsFilterState.java | 56 +-
.../com/android/quickstep/RecentsModel.java | 191 +-
.../android/quickstep/RemoteTargetGluer.java | 35 +-
.../quickstep/RotationTouchHelper.java | 222 +-
.../SimpleOrientationTouchTransformer.java | 65 +-
.../quickstep/SwipeUpAnimationLogic.java | 29 +-
.../com/android/quickstep/SystemUiProxy.java | 1655 +
.../quickstep/TaskAnimationManager.java | 273 +-
.../android/quickstep/TaskOverlayFactory.java | 199 +-
.../quickstep/TaskShortcutFactory.java | 251 +-
.../android/quickstep/TaskThumbnailCache.java | 279 +
.../src/com/android/quickstep/TaskUtils.java | 6 +-
.../com/android/quickstep/TaskViewUtils.java | 203 +-
.../com/android/quickstep/TopTaskTracker.java | 513 +-
.../quickstep/TouchInteractionService.java | 1390 +-
.../src/com/android/quickstep/ViewUtils.java | 59 +-
.../FallbackRecentsStateController.java | 57 +-
.../fallback/FallbackRecentsView.java | 97 +-
.../quickstep/fallback/RecentsDragLayer.java | 43 +-
.../quickstep/fallback/RecentsState.java | 89 +-
.../fallback/RecentsTaskController.java | 36 +
.../AccessibilityInputConsumer.java | 20 +-
.../AssistantInputConsumer.java | 2 +-
.../inputconsumers/DelegateInputConsumer.java | 16 +-
.../DeviceLockedInputConsumer.java | 46 +-
.../NavHandleLongPressHandler.java | 137 +-
.../NavHandleLongPressInputConsumer.java | 94 +-
.../OneHandedModeInputConsumer.java | 10 +-
.../OtherActivityInputConsumer.java | 82 +-
.../inputconsumers/OverviewInputConsumer.java | 17 +-
.../OverviewWithoutFocusInputConsumer.java | 19 +-
.../ProgressDelegateInputConsumer.java | 17 +-
.../ResetGestureInputConsumer.java | 55 +
.../ScreenPinnedInputConsumer.java | 8 -
.../SysUiOverlayInputConsumer.java | 9 -
.../TaskbarUnstashInputConsumer.java | 105 +-
.../TrackpadStatusBarInputConsumer.java | 7 +-
.../quickstep/interaction/AllSetActivity.java | 172 +-
.../interaction/AnimatedTaskView.java | 9 +-
.../BackGestureTutorialController.java | 70 +-
.../interaction/EdgeBackGestureHandler.java | 17 +-
.../interaction/GestureSandboxActivity.java | 38 +-
.../HomeGestureTutorialController.java | 49 +-
.../interaction/NavBarGestureHandler.java | 18 +-
.../OverviewGestureTutorialController.java | 58 +-
.../interaction/RootSandboxLayout.java | 65 +
.../SwipeUpGestureTutorialController.java | 63 +-
.../interaction/TutorialController.java | 408 +-
.../interaction/TutorialFragment.java | 22 +-
.../interaction/TutorialStepIndicator.java | 118 +
.../logging/SettingsChangeLogger.java | 82 +-
.../logging/StatsLogCompatManager.java | 235 +-
.../orientation/LandscapePagedViewHandler.kt | 191 +-
.../orientation/PortraitPagedViewHandler.java | 820 +
.../RecentsPagedOrientationHandler.kt | 74 +-
.../orientation/SeascapePagedViewHandler.kt | 160 +-
.../recents/data/RecentTasksRepository.kt | 17 +-
.../quickstep/recents/data/TasksRepository.kt | 260 +-
.../recents/viewmodel/RecentsViewData.kt | 17 +-
.../task/thumbnail/TaskThumbnailUiState.kt | 47 +-
.../task/thumbnail/TaskThumbnailView.kt | 267 +-
.../task/thumbnail/TaskThumbnailViewModel.kt | 91 +
.../thumbnail/data/TaskThumbnailDataSource.kt | 7 +-
.../quickstep/task/viewmodel/TaskViewData.kt | 24 +
.../util/ActiveGestureErrorDetector.java | 454 +
.../quickstep/util/ActiveGestureLog.java | 376 +
.../quickstep/util/ActivityInitListener.java | 73 +
.../com/android/quickstep/util/AnimUtils.java | 62 +-
.../AnimatorControllerWithResistance.java | 60 +-
.../quickstep/util/AppPairsController.java | 169 +-
.../util/AssistContentRequester.java | 2 +-
.../quickstep/util/AssistStateManager.java | 93 +
.../android/quickstep/util/AssistUtils.java | 45 +
.../quickstep/util/BaseDepthController.java | 132 +-
.../android/quickstep/util/BorderAnimator.kt | 29 +-
.../quickstep/util/CachedEventDispatcher.java | 5 -
.../android/quickstep/util/DesktopTask.java | 71 +
.../com/android/quickstep/util/GroupTask.java | 94 +
.../quickstep/util/ImageActionUtils.java | 20 +-
.../quickstep/util/InputConsumerProxy.java | 13 +-
.../util/InputProxyHandlerFactory.java | 7 +-
.../LauncherUnfoldAnimationController.java | 20 +-
.../android/quickstep/util/LayoutUtils.java | 22 +-
.../quickstep/util/MotionPauseDetector.java | 63 +-
.../util/QuickstepOnboardingPrefs.java | 3 +-
.../util/RecentsAtomicAnimationFactory.java | 9 +-
.../quickstep/util/RecentsOrientedState.java | 75 +-
.../util/ScalingWorkspaceRevealAnim.kt | 112 +-
.../quickstep/util/SlideInRemoteTransition.kt | 4 -
.../util/SplitAnimationController.kt | 367 +-
.../quickstep/util/SplitAnimationTimings.java | 15 -
.../quickstep/util/SplitScreenUtils.kt | 93 +-
.../util/SplitSelectStateController.java | 460 +-
.../util/SplitToWorkspaceController.java | 26 +-
.../SplitWithKeyboardShortcutController.java | 65 +-
.../util/StaggeredWorkspaceAnim.java | 10 +-
.../util/SwipePipToHomeAnimator.java | 96 +-
.../quickstep/util/SystemUiFlagUtils.kt | 16 -
.../util/SystemWindowManagerProxy.java | 91 +-
.../android/quickstep/util/TISBindHelper.java | 3 +-
.../quickstep/util/TaskGridNavHelper.java | 136 +
.../util/TaskKeyByLastActiveTimeCache.java | 2 -
.../android/quickstep/util/TaskKeyCache.java | 3 -
.../quickstep/util/TaskKeyLruCache.java | 3 -
.../util/TaskRemovedDuringLaunchListener.java | 5 +-
.../TaskRestartedDuringLaunchListener.java | 5 +
.../quickstep/util/TaskViewSimulator.java | 230 +-
.../util/TaskVisualsChangeListener.java | 3 +-
.../quickstep/util/TransformParams.java | 78 +-
.../quickstep/util/WorkspaceRevealAnim.java | 16 -
.../LauncherUnfoldTransitionController.kt | 11 +-
.../quickstep/views/DesktopTaskView.kt | 576 +-
.../views/FloatingAppPairBackground.kt | 15 +-
.../views/FloatingWidgetBackgroundView.java | 4 +-
.../quickstep/views/FloatingWidgetView.java | 111 +-
.../quickstep/views/GroupedTaskView.kt | 238 +-
.../quickstep/views/IconAppChipView.java | 464 +
.../com/android/quickstep/views/IconView.java | 209 +
.../quickstep/views/LauncherRecentsView.java | 111 +-
.../quickstep/views/OverviewActionsView.java | 90 +-
.../android/quickstep/views/RecentsView.java | 3331 +-
.../quickstep/views/RecentsViewContainer.java | 56 +-
.../views/SplitInstructionsView.java | 80 +-
.../quickstep/views/TaskMenuViewWithArrow.kt | 25 +-
.../views/TaskThumbnailViewDeprecated.java | 159 +-
.../com/android/quickstep/views/TaskView.kt | 1507 +-
.../android/quickstep/views/TaskViewIcon.java | 5 -
.../launcher3/model/AppEventProducerTest.java | 23 +-
.../TaskbarNavButtonControllerTest.java | 123 +-
.../launcher3/taskbar/TaskbarUnitTestRule.kt | 164 +
.../allapps/TaskbarAllAppsControllerTest.kt | 153 +-
.../animation/BubbleBarViewAnimatorTest.kt | 454 +
.../overlay/TaskbarOverlayControllerTest.kt | 170 +-
.../quickstep/AllAppsActionManagerTest.kt | 89 +-
.../quickstep/FullscreenDrawParamsTest.kt | 141 +-
.../LandscapePagedViewHandlerTest.kt | 15 +-
.../SeascapePagedViewHandlerTest.kt | 15 +-
.../recents/data/FakeRecentTasksDataSource.kt | 6 +-
.../data/FakeTaskThumbnailDataSource.kt | 47 +-
.../recents/data/FakeTasksRepository.kt | 49 +-
.../recents/data/TasksRepositoryTest.kt | 486 +-
.../thumbnail/TaskThumbnailViewModelTest.kt | 178 +
.../quickstep/util/AppPairsControllerTest.kt | 193 +-
.../util/SplitAnimationControllerTest.kt | 60 +-
.../util/SplitSelectStateControllerTest.kt | 202 +-
.../quickstep/util/TaskGridNavHelperTest.java | 510 +
.../quickstep/util/TaskViewSimulatorTest.java | 30 +-
.../model/QuickstepModelDelegateTest.kt | 127 +
.../WidgetsPredicationUpdateTaskTest.java | 57 +-
.../model/WidgetsPredictionsRequesterTest.kt | 221 +
.../FallbackTaskbarUIControllerTest.kt | 80 +
.../launcher3/taskbar/TaskbarBaseTestCase.kt | 103 +
.../TaskbarHoverToolTipControllerTest.java | 219 +
.../taskbar/TaskbarKeyguardControllerTest.kt | 111 +
.../TaskbarRecentAppsControllerTest.kt | 242 +
.../quickstep/AbstractQuickStepTest.java | 49 +-
.../quickstep/AbstractTaplTestsTaskbar.java | 16 +-
.../quickstep/DesktopSystemShortcutTest.kt | 275 +-
.../quickstep/FallbackRecentsTest.java | 75 +-
.../quickstep/NavigationModeSwitchRule.java | 14 +-
.../OrientationTouchTransformerTest.java | 75 +-
.../quickstep/RecentTasksListTest.java | 107 +
.../RecentsAnimationDeviceStateTest.kt | 205 +
.../android/quickstep/RecentsModelTest.java | 173 +
.../TaplDigitalWellBeingToastTest.java | 109 +
.../quickstep/TaplOverviewIconTest.java | 41 +-
.../quickstep/TaplPrivateSpaceTest.java | 13 +-
.../TaplStartLauncherViaGestureTests.java | 72 +-
.../TaplTestsKeyboardQuickSwitch.java | 9 -
.../quickstep/TaplTestsPersistentTaskbar.java | 6 +
.../android/quickstep/TaplTestsQuickstep.java | 433 +-
.../quickstep/TaplTestsSplitscreen.java | 53 +-
.../android/quickstep/TaplTestsTrackpad.java | 6 +
.../quickstep/TaskThumbnailCacheTest.java | 95 +
.../com/android/quickstep/TaskViewTest.java | 12 +
.../TaskbarPinningControllerTest.kt | 219 +
.../TaskbarSpecsEvaluatorTest.kt | 99 +
.../util/GestureExclusionManagerTest.kt | 135 +
.../shared_x_axis_activity_close_enter.xml | 42 +
.../shared_x_axis_activity_close_exit.xml | 41 +
.../shared_x_axis_activity_open_enter.xml | 42 +
.../shared_x_axis_activity_open_exit.xml | 41 +
.../material_color_surface.xml | 19 +
.../material_color_surface_bright.xml | 19 +
.../material_color_surface_container.xml | 19 +
.../material_color_surface_container_high.xml | 19 +
...terial_color_surface_container_highest.xml | 19 +
.../material_color_surface_container_low.xml | 19 +
...aterial_color_surface_container_lowest.xml | 6 +-
.../material_color_surface_dim.xml | 19 +
.../material_color_surface_inverse.xml | 19 +
.../material_color_surface_variant.xml | 19 +
.../popup_color_background.xml | 20 +
res/color-night-v31/popup_shade_first.xml | 5 +-
res/color-v31/material_color_surface.xml | 19 +
.../material_color_surface_bright.xml | 19 +
.../material_color_surface_container.xml | 19 +
.../material_color_surface_container_high.xml | 19 +
...terial_color_surface_container_highest.xml | 19 +
.../material_color_surface_container_low.xml | 19 +
...aterial_color_surface_container_lowest.xml | 6 +-
res/color-v31/material_color_surface_dim.xml | 19 +
.../material_color_surface_inverse.xml | 20 +
.../material_color_surface_variant.xml | 19 +
res/color-v31/popup_color_background.xml | 20 +
res/color-v31/popup_shade_first.xml | 5 +-
res/color/overview_button.xml | 7 +-
res/color/popup_color_background.xml | 18 +
res/color/popup_shade_first.xml | 5 +-
.../ic_transient_taskbar_all_apps_button.xml | 48 +
res/drawable/add_item_dialog_background.xml | 2 +-
res/drawable/all_apps_tabs_background.xml | 49 +-
res/drawable/bg_ps_header.xml | 2 +-
res/drawable/bg_ps_lock_button.xml | 6 +-
res/drawable/bg_ps_transition_image.xml | 6 +-
res/drawable/bg_ps_unlock_button.xml | 4 +-
.../bg_rounded_corner_bottom_sheet_handle.xml | 3 +-
.../bg_widgets_header_states_two_pane.xml | 22 +-
res/drawable/bg_widgets_header_two_pane.xml | 15 +-
.../button_top_rounded_bordered_ripple.xml | 2 +-
res/drawable/ic_corp_off.xml | 10 +-
res/drawable/ic_info_no_shadow.xml | 2 +-
res/drawable/ic_install_no_shadow.xml | 2 +-
res/drawable/ic_install_to_private.xml | 2 +-
res/drawable/ic_lock.xml | 2 +-
.../ic_private_space_with_background.xml | 7 +-
res/drawable/ic_ps_settings.xml | 4 +-
res/drawable/ic_smartspace.xml | 20 +-
res/drawable/ic_split_horizontal.xml | 30 +-
res/drawable/ic_split_vertical.xml | 30 +-
res/drawable/ic_taskbar_all_apps_button.xml | 48 +
.../ic_transient_taskbar_all_apps_button.xml | 48 +
res/drawable/ic_uninstall_no_shadow.xml | 2 +-
res/drawable/ic_widget.xml | 32 +-
res/drawable/icon_menu_arrow_background.xml | 5 +-
res/drawable/popup_background.xml | 2 +-
res/drawable/private_space_app_divider.xml | 2 +-
.../private_space_install_app_icon.xml | 20 +-
res/drawable/ps_lock_background.xml | 2 +-
res/drawable/ps_settings_background.xml | 2 +-
res/drawable/rounded_action_button.xml | 10 +-
.../widget_picker_tabs_background.xml | 63 +-
res/drawable/work_card.xml | 3 +-
res/drawable/work_mode_fab_background.xml | 5 +-
res/layout/add_item_confirmation_activity.xml | 3 +-
res/layout/all_apps_fast_scroller.xml | 13 -
res/layout/all_apps_personal_work_tabs.xml | 4 +-
res/layout/launcher.xml | 3 +-
res/layout/page_indicator_dots.xml | 22 +
res/layout/private_space_header.xml | 10 +-
res/layout/user_folder_icon_normalized.xml | 5 +-
res/layout/widgets_full_sheet.xml | 10 +-
res/layout/widgets_full_sheet_paged_view.xml | 3 +-
.../widgets_full_sheet_recyclerview.xml | 1 -
res/layout/widgets_list_row_header.xml | 10 +-
.../widgets_list_row_header_two_pane.xml | 10 +-
res/layout/widgets_two_pane_sheet.xml | 42 +-
.../widgets_two_pane_sheet_paged_view.xml | 108 +-
.../widgets_two_pane_sheet_recyclerview.xml | 68 +-
res/layout/work_apps_edu.xml | 18 +-
res/layout/work_mode_fab.xml | 20 +-
res/values-af/strings.xml | 49 +-
res/values-am/strings.xml | 29 +-
res/values-ar/strings.xml | 53 +-
res/values-as/strings.xml | 31 +-
res/values-az/strings.xml | 31 +-
res/values-b+sr+Latn/strings.xml | 29 +-
res/values-be/strings.xml | 29 +-
res/values-bg/strings.xml | 33 +-
res/values-bn/strings.xml | 31 +-
res/values-bs/strings.xml | 31 +-
res/values-ca/strings.xml | 29 +-
res/values-cs/strings.xml | 35 +-
res/values-da/strings.xml | 31 +-
res/values-de/strings.xml | 29 +-
res/values-el/strings.xml | 33 +-
res/values-en-rAU/strings.xml | 29 +-
res/values-en-rCA/strings.xml | 29 +-
res/values-en-rGB/strings.xml | 29 +-
res/values-en-rIN/strings.xml | 29 +-
res/values-en-rXC/strings.xml | 4 -
res/values-es-rUS/strings.xml | 31 +-
res/values-es/strings.xml | 29 +-
res/values-et/strings.xml | 31 +-
res/values-eu/strings.xml | 35 +-
res/values-fa/strings.xml | 83 +-
res/values-fi/strings.xml | 29 +-
res/values-fr-rCA/strings.xml | 33 +-
res/values-fr/strings.xml | 33 +-
res/values-gl/strings.xml | 33 +-
res/values-gu/strings.xml | 37 +-
res/values-hi/strings.xml | 33 +-
res/values-hr/strings.xml | 31 +-
res/values-hu/strings.xml | 31 +-
res/values-hy/strings.xml | 33 +-
res/values-in/strings.xml | 29 +-
res/values-is/strings.xml | 31 +-
res/values-it/strings.xml | 35 +-
res/values-iw/strings.xml | 43 +-
res/values-ja/strings.xml | 31 +-
res/values-ka/strings.xml | 31 +-
res/values-kk/strings.xml | 31 +-
res/values-km/strings.xml | 31 +-
res/values-kn/strings.xml | 41 +-
res/values-ko/strings.xml | 29 +-
res/values-ky/strings.xml | 31 +-
res/values-lo/strings.xml | 29 +-
res/values-lt/strings.xml | 35 +-
res/values-lv/strings.xml | 31 +-
res/values-mk/strings.xml | 31 +-
res/values-ml/strings.xml | 29 +-
res/values-mn/strings.xml | 31 +-
res/values-mr/strings.xml | 33 +-
res/values-ms/strings.xml | 33 +-
res/values-my/strings.xml | 29 +-
res/values-nb/strings.xml | 31 +-
res/values-ne/strings.xml | 37 +-
res/values-night-v31/colors.xml | 42 +-
res/values-night-v34/colors.xml | 3 -
res/values-night/colors.xml | 124 +-
res/values-night/styles.xml | 12 +-
res/values-nl/strings.xml | 31 +-
res/values-or/strings.xml | 35 +-
res/values-pa/strings.xml | 37 +-
res/values-pl/strings.xml | 31 +-
res/values-pt-rPT/strings.xml | 31 +-
res/values-pt/strings.xml | 33 +-
res/values-ro/strings.xml | 29 +-
res/values-ru/strings.xml | 31 +-
res/values-si/strings.xml | 29 +-
res/values-sk/strings.xml | 33 +-
res/values-sl/strings.xml | 31 +-
res/values-sq/strings.xml | 29 +-
res/values-sr/strings.xml | 29 +-
res/values-sv/strings.xml | 33 +-
res/values-sw/strings.xml | 33 +-
res/values-sw600dp/styles.xml | 5 +-
res/values-ta/strings.xml | 33 +-
res/values-te/strings.xml | 37 +-
res/values-th/strings.xml | 29 +-
res/values-tl/strings.xml | 29 +-
res/values-tr/strings.xml | 31 +-
res/values-uk/strings.xml | 29 +-
res/values-ur/strings.xml | 31 +-
res/values-uz/strings.xml | 29 +-
res/values-v31/colors.xml | 42 +-
res/values-v31/styles.xml | 7 +-
res/values-v33/style.xml | 40 +
res/values-v34/colors.xml | 104 -
res/values-vi/strings.xml | 31 +-
res/values-zh-rCN/strings.xml | 35 +-
res/values-zh-rHK/strings.xml | 29 +-
res/values-zh-rTW/strings.xml | 29 +-
res/values-zu/strings.xml | 29 +-
res/values/attrs.xml | 78 +-
res/values/colors.xml | 223 +-
res/values/config.xml | 17 +-
res/values/dimens.xml | 72 +-
res/values/id.xml | 2 -
res/values/strings.xml | 65 +-
res/values/styles.xml | 151 +-
res/xml/backupscheme.xml | 10 +-
res/xml/device_profiles.xml | 41 -
res/xml/folder_shapes.xml | 33 +
res/xml/launcher_preferences.xml | 9 -
res/xml/paddings_6x5.xml | 21 +-
settings.gradle | 10 -
.../launcher3/AbstractFloatingView.java | 63 +-
src/com/android/launcher3/Alarm.java | 11 -
src/com/android/launcher3/AppFilter.java | 8 +-
.../launcher3/AppWidgetResizeFrame.java | 192 +-
.../android/launcher3/AutoInstallsLayout.java | 22 +-
src/com/android/launcher3/BaseActivity.java | 135 +-
src/com/android/launcher3/BubbleTextView.java | 700 +-
.../android/launcher3/ButtonDropTarget.java | 60 +-
src/com/android/launcher3/CellLayout.java | 52 +-
.../launcher3/CheckLongPressHelper.java | 2 -
.../android/launcher3/DeleteDropTarget.java | 6 +-
src/com/android/launcher3/DeviceProfile.java | 810 +-
src/com/android/launcher3/DropTarget.java | 6 -
.../android/launcher3/DropTargetHandler.kt | 45 +-
.../launcher3/FastScrollRecyclerView.java | 59 +-
.../android/launcher3/GestureNavContract.java | 7 +-
src/com/android/launcher3/Hotseat.java | 217 +-
.../launcher3/InvariantDeviceProfile.java | 2721 +-
src/com/android/launcher3/Launcher.java | 851 +-
.../launcher3/LauncherApplication.java | 37 -
.../launcher3/LauncherBackupAgent.java | 36 +-
.../android/launcher3/LauncherConstants.java | 3 -
src/com/android/launcher3/LauncherFiles.java | 14 +-
src/com/android/launcher3/LauncherPrefs.kt | 217 +-
.../android/launcher3/LauncherProvider.java | 131 +-
.../android/launcher3/LauncherRootView.java | 38 +-
.../android/launcher3/LauncherSettings.java | 23 +-
src/com/android/launcher3/LauncherState.java | 15 +-
src/com/android/launcher3/ModelCallbacks.kt | 68 +-
.../android/launcher3/MotionEventsUtils.java | 8 +-
src/com/android/launcher3/PagedView.java | 25 +-
.../launcher3/SecondaryDropTarget.java | 40 +-
.../launcher3/SessionCommitReceiver.java | 32 +-
.../launcher3/ShortcutAndWidgetContainer.java | 13 +-
src/com/android/launcher3/Utilities.java | 473 +-
src/com/android/launcher3/Workspace.java | 824 +-
.../AccessibleDragListenerAdapter.java | 89 +
.../DragAndDropAccessibilityDelegate.java | 13 +-
.../LauncherAccessibilityDelegate.java | 54 +-
.../ShortcutMenuAccessibilityDelegate.java | 2 +
.../WorkspaceAccessibilityHelper.java | 4 +-
.../allapps/ActivityAllAppsContainerView.java | 490 +-
.../allapps/AllAppsFastScrollHelper.java | 3 -
.../launcher3/allapps/AllAppsGridAdapter.java | 7 +-
.../allapps/AllAppsRecyclerView.java | 102 +-
.../launcher3/allapps/AllAppsStore.java | 32 +-
.../allapps/AllAppsTransitionController.java | 296 +-
.../allapps/AlphabeticalAppsList.java | 117 +-
.../launcher3/allapps/BaseAllAppsAdapter.java | 113 +-
.../launcher3/allapps/FloatingHeaderView.java | 45 +-
.../launcher3/allapps/FloatingMaskView.java | 21 +-
.../allapps/PrivateProfileManager.java | 272 +-
.../allapps/SectionDecorationHandler.java | 8 +-
.../launcher3/allapps/UserProfileManager.java | 23 +-
.../launcher3/allapps/WorkPausedCard.java | 17 +-
.../launcher3/allapps/WorkProfileManager.java | 95 +-
.../search/AllAppsSearchBarController.java | 26 +-
.../anim/AnimatedPropertySetter.java | 25 +-
.../launcher3/anim/PendingAnimation.java | 6 +-
.../launcher3/apppairs/AppPairIcon.java | 32 -
.../apppairs/AppPairIconDrawable.java | 25 -
.../apppairs/AppPairIconDrawingParams.kt | 2 -
.../launcher3/apppairs/AppPairIconGraphic.kt | 23 +-
.../LauncherRestoreEventLogger.kt | 38 +-
.../celllayout/ReorderAlgorithm.java | 14 +-
.../compat/AlphabeticIndexCompat.java | 7 -
.../launcher3/config/FeatureFlags.java | 620 +-
.../android/launcher3/dot/FolderDotInfo.java | 13 +-
.../launcher3/dragndrop/AddItemActivity.java | 8 +-
.../dragndrop/BaseItemDragListener.java | 8 +-
.../launcher3/dragndrop/DragController.java | 27 +-
.../launcher3/dragndrop/DragLayer.java | 41 +-
.../android/launcher3/dragndrop/DragView.java | 33 +-
.../dragndrop/FolderAdaptiveIcon.java | 186 +-
.../dragndrop/LauncherDragController.java | 46 +-
.../PinShortcutRequestActivityInfo.java | 10 +-
.../dragndrop/SpringLoadedDragController.java | 75 +
.../folder/ClippedFolderIconLayoutRule.java | 41 +-
src/com/android/launcher3/folder/Folder.java | 371 +-
.../folder/FolderAnimationManager.java | 29 +-
.../launcher3/folder/FolderGridOrganizer.java | 9 -
.../android/launcher3/folder/FolderIcon.java | 137 +-
.../launcher3/folder/FolderNameProvider.java | 14 +-
.../launcher3/folder/FolderPagedView.java | 61 +-
.../launcher3/folder/PreviewBackground.java | 9 +-
.../launcher3/folder/PreviewItemManager.java | 39 +-
.../launcher3/graphics/IconPalette.java | 110 +
.../graphics/LauncherPreviewRenderer.java | 500 +-
.../graphics/PreloadIconDrawable.java | 28 +-
.../graphics/PreviewSurfaceRenderer.java | 411 +-
.../launcher3/graphics/SysUiScrim.java | 41 +-
.../launcher3/icons/ComponentWithLabel.java | 75 +
.../android/launcher3/icons/IconCache.java | 509 +-
.../icons/MonochromeIconFactory.java | 172 +
.../keyboard/ItemFocusIndicatorHelper.java | 4 -
.../android/launcher3/logging/FileLog.java | 2 +-
.../launcher3/logging/StatsLogManager.java | 356 +-
.../model/AddWorkspaceItemsTask.java | 36 +-
.../android/launcher3/model/AllAppsList.java | 33 +-
.../launcher3/model/BaseLauncherBinder.java | 348 +-
.../android/launcher3/model/BgDataModel.java | 333 +-
.../launcher3/model/CacheDataUpdatedTask.java | 28 +-
.../launcher3/model/DatabaseHelper.java | 24 +-
.../launcher3/model/DeviceGridState.java | 95 +-
.../launcher3/model/FirstScreenBroadcast.java | 6 +-
.../model/FirstScreenBroadcastHelper.kt | 124 +-
.../model/GridSizeMigrationUtil.java | 815 +
.../launcher3/model/ItemInstallQueue.java | 38 +-
.../android/launcher3/model/LoaderCursor.java | 191 +-
.../android/launcher3/model/LoaderTask.java | 540 +-
.../launcher3/model/ModelDbController.java | 421 +-
.../launcher3/model/ModelDelegate.java | 46 +-
.../launcher3/model/ModelLauncherCallbacks.kt | 49 +-
.../launcher3/model/ModelTaskController.kt | 37 +-
.../android/launcher3/model/ModelUtils.java | 65 +-
.../android/launcher3/model/ModelWriter.java | 71 +-
.../model/PackageInstallStateChangedTask.java | 25 +-
.../launcher3/model/PackageUpdatedTask.java | 198 +-
.../model/SdCardAvailableReceiver.java | 13 +-
.../launcher3/model/ShortcutsChangedTask.java | 136 +
.../model/UserLockStateChangedTask.java | 6 +-
.../android/launcher3/model/WidgetItem.java | 61 +-
.../android/launcher3/model/WidgetsModel.java | 262 +-
.../launcher3/model/WorkspaceItemProcessor.kt | 201 +-
.../model/WorkspaceItemSpaceFinder.java | 46 +-
.../android/launcher3/model/data/AppInfo.java | 32 +-
.../launcher3/model/data/AppPairInfo.kt | 24 +-
.../launcher3/model/data/CollectionInfo.kt | 6 +
.../launcher3/model/data/FolderInfo.java | 156 +-
.../launcher3/model/data/IconRequestInfo.java | 20 +-
.../launcher3/model/data/ItemInfo.java | 37 +-
.../model/data/ItemInfoWithIcon.java | 33 +-
.../model/data/LauncherAppWidgetInfo.java | 8 +-
.../model/data/SearchActionItemInfo.java | 22 +-
.../model/data/WorkspaceItemInfo.java | 64 +-
.../notification/NotificationKeyData.java | 10 +-
.../notification/NotificationListener.java | 13 -
.../pageindicators/PageIndicator.java | 10 -
.../pageindicators/PageIndicatorDots.java | 445 +-
.../WorkspacePageIndicator.java | 265 +
.../launcher3/pm/InstallSessionHelper.java | 33 +-
.../launcher3/pm/InstallSessionTracker.java | 24 +-
.../launcher3/pm/PinRequestHelper.java | 9 +-
.../pm/ShortcutConfigActivityInfo.java | 40 +-
src/com/android/launcher3/pm/UserCache.java | 72 +-
.../android/launcher3/popup/ArrowPopup.java | 230 +-
.../popup/PopupContainerWithArrow.java | 63 +-
.../launcher3/popup/PopupDataProvider.java | 155 +-
.../popup/PopupLiveUpdateHandler.java | 22 +-
.../launcher3/popup/PopupPopulator.java | 13 +-
.../launcher3/popup/SystemShortcut.java | 289 +-
.../launcher3/provider/RestoreDbTask.java | 193 +-
.../launcher3/qsb/QsbContainerView.java | 5 +-
.../recyclerview/AllAppsRecyclerViewPool.kt | 96 +-
.../search/StringMatcherUtility.java | 22 +-
.../SecondaryDisplayLauncher.java | 104 +-
.../secondarydisplay/SecondaryDragLayer.java | 36 +-
.../launcher3/settings/SettingsActivity.java | 116 +-
.../shortcuts/DeepShortcutTextView.java | 7 -
.../launcher3/statemanager/BaseState.java | 21 +-
.../launcher3/statemanager/StateManager.java | 164 +-
.../statemanager/StatefulActivity.java | 12 +-
.../statemanager/StatefulContainer.java | 12 +-
.../android/launcher3/states/EditModeState.kt | 6 +-
.../android/launcher3/states/HintState.java | 5 +-
.../launcher3/states/RotationHelper.java | 35 +-
.../launcher3/states/SpringLoadedState.java | 3 +-
.../states/StateAnimationConfig.java | 4 +-
.../testing/TestInformationHandler.java | 68 +-
.../testing/TestInformationProvider.java | 69 +-
.../testing/shared/TestProtocol.java | 45 +-
.../AbstractStateChangeTouchController.java | 6 +-
.../touch/AllAppsSwipeController.java | 71 +-
.../launcher3/touch/BaseSwipeDetector.java | 9 +-
.../launcher3/touch/ItemClickHandler.java | 28 +-
.../touch/ItemLongClickListener.java | 2 +-
.../touch/WorkspaceTouchListener.java | 11 +-
.../util/ActivityOptionsWrapper.java | 1 -
.../launcher3/util/ActivityTracker.java | 117 +
.../android/launcher3/util/ApiWrapper.java | 88 +-
.../launcher3/util/BackPressHandler.java | 3 -
.../android/launcher3/util/ContentWriter.java | 3 +-
.../android/launcher3/util/DimensionUtils.kt | 5 +-
.../launcher3/util/DisplayController.java | 557 +-
.../launcher3/util/DynamicResource.java | 26 +-
.../launcher3/util/EdgeEffectCompat.java | 15 +
src/com/android/launcher3/util/Executors.java | 34 +-
.../launcher3/util/IntSparseArrayMap.java | 6 -
.../android/launcher3/util/ItemInflater.kt | 10 +-
.../util/LauncherBindableItemsContainer.java | 124 +
.../android/launcher3/util/LockedUserState.kt | 73 +-
src/com/android/launcher3/util/LogConfig.java | 5 +-
.../launcher3/util/LooperExecutor.java | 118 +
.../util/MainThreadInitializedObject.java | 134 +-
.../util/MultiTranslateDelegate.java | 4 +-
.../android/launcher3/util/OnboardingPrefs.kt | 3 +-
.../launcher3/util/OverlayEdgeEffect.java | 1 -
.../launcher3/util/PackageManagerHelper.java | 244 +-
.../launcher3/util/PluginManagerWrapper.java | 23 +-
.../launcher3/util/ScreenOnTracker.java | 42 +-
.../android/launcher3/util/SettingsCache.java | 69 +-
.../android/launcher3/util/ShortcutUtil.java | 8 +
.../util/SimpleBroadcastReceiver.java | 166 +-
.../util/SplitConfigurationOptions.java | 75 +-
.../android/launcher3/util/StableViewInfo.kt | 8 +-
.../launcher3/util/SystemUiController.java | 13 +-
src/com/android/launcher3/util/Themes.java | 51 +-
.../launcher3/util/VibratorWrapper.java | 156 +-
src/com/android/launcher3/util/ViewCache.java | 5 +-
.../launcher3/util/ViewOnDrawExecutor.java | 8 +-
src/com/android/launcher3/util/ViewPool.java | 28 +-
.../launcher3/util/WallpaperColorHints.kt | 50 +-
.../util/WallpaperOffsetInterpolator.java | 71 +-
src/com/android/launcher3/util/rects/Rects.kt | 18 -
.../util/window/RefreshRateTracker.java | 83 +
.../util/window/WindowManagerProxy.java | 212 +-
.../launcher3/views/AbstractSlideInView.java | 5 +-
.../views/AccessibilityActionsView.java | 5 +-
.../launcher3/views/ActivityContext.java | 240 +-
.../android/launcher3/views/ArrowTipView.java | 52 +-
.../launcher3/views/BaseDragLayer.java | 18 +-
.../android/launcher3/views/ClipIconView.java | 28 +-
.../launcher3/views/ComposeInitializer.java | 229 +
.../views/DoubleShadowBubbleTextView.java | 146 +-
.../launcher3/views/FloatingIconView.java | 8 +-
.../views/FloatingIconViewCompanion.java | 4 +-
.../launcher3/views/FloatingSurfaceView.java | 36 +-
.../launcher3/views/OptionsPopupView.java | 40 +-
.../views/RecyclerViewFastScroller.java | 104 +-
.../android/launcher3/views/ScrimView.java | 7 +-
.../launcher3/views/SpringRelativeLayout.java | 8 +-
.../launcher3/views/StickyHeaderLayout.java | 14 +-
.../widget/AddItemWidgetsBottomSheet.java | 8 +-
.../widget/BaseLauncherAppWidgetHostView.java | 6 +-
.../launcher3/widget/BaseWidgetSheet.java | 102 +-
.../widget/DatabaseWidgetPreviewLoader.java | 112 +-
.../widget/LauncherAppWidgetHost.java | 121 +-
.../widget/LauncherAppWidgetHostView.java | 63 +-
.../widget/LauncherAppWidgetProviderInfo.java | 79 +-
.../widget/LauncherWidgetHolder.java | 343 +-
.../launcher3/widget/LocalColorExtractor.java | 5 -
.../widget/PendingAddWidgetInfo.java | 5 +-
.../widget/PendingAppWidgetHostView.java | 191 +-
.../widget/PendingItemDragHelper.java | 4 +-
.../widget/RoundedCornerEnforcement.java | 16 +-
.../android/launcher3/widget/WidgetCell.java | 206 +-
.../launcher3/widget/WidgetImageView.java | 7 -
.../launcher3/widget/WidgetInflater.kt | 35 +-
.../launcher3/widget/WidgetManagerHelper.java | 15 +-
.../launcher3/widget/WidgetsBottomSheet.java | 13 +-
.../custom/CustomAppWidgetProviderInfo.java | 8 +-
.../widget/custom/CustomWidgetManager.java | 126 +-
.../widget/model/WidgetListSpaceEntry.java | 5 -
.../widget/model/WidgetsListBaseEntry.java | 3 -
.../widget/model/WidgetsListContentEntry.java | 5 -
.../widget/model/WidgetsListHeaderEntry.java | 6 -
.../android/launcher3/widget/picker/OWNERS | 1 +
.../picker/WidgetRecommendationCategory.java | 6 -
.../WidgetRecommendationCategoryProvider.java | 32 +-
.../picker/WidgetRecommendationsView.java | 183 +-
.../widget/picker/WidgetsFullSheet.java | 494 +-
.../widget/picker/WidgetsListAdapter.java | 111 +-
.../widget/picker/WidgetsListHeader.java | 17 +-
.../picker/WidgetsListItemAnimator.java | 10 -
.../WidgetsListTableViewHolderBinder.java | 96 +-
.../WidgetsRecommendationTableLayout.java | 58 +-
.../widget/picker/WidgetsTwoPaneSheet.java | 296 +-
.../search/LauncherWidgetsSearchBar.java | 4 +-
.../search/SimpleWidgetsSearchAlgorithm.java | 10 +-
.../picker/search/WidgetsSearchBar.java | 17 +-
.../search/WidgetsSearchBarController.java | 10 +-
.../util/WidgetPreviewContainerSizes.kt | 1 -
.../widget/util/WidgetsTableUtils.java | 18 +-
.../PersonalWorkSlidingTabStrip.java | 18 +-
.../uioverrides/states/AllAppsState.java | 7 +-
.../uioverrides/states/OverviewState.java | 5 +-
.../shared/LauncherOverlayManager.java | 36 +-
systemUI/README.md | 6 +-
systemUI/anim/Android.bp | 14 +-
systemUI/anim/build.gradle | 14 +-
systemUI/anim/res/values/ids.xml | 5 +-
.../animation/ActivityTransitionAnimator.kt | 930 +-
.../animation/DialogTransitionAnimator.kt | 89 +-
.../android/systemui/animation/Expandable.kt | 12 +-
.../systemui/animation/FontInterpolator.kt | 205 +-
.../systemui/animation/FontVariationUtils.kt | 69 +-
...GhostedViewTransitionAnimatorController.kt | 110 +-
.../RemoteAnimationRunnerCompat.java | 111 +-
.../systemui/animation/TextAnimator.kt | 341 +-
.../systemui/animation/TextInterpolator.kt | 44 +-
.../systemui/animation/TransitionAnimator.kt | 960 +-
.../animation/ViewHierarchyAnimator.kt | 233 +-
.../animation/back/BackAnimationSpec.kt | 7 +-
.../back/OnBackAnimationCallbackExtension.kt | 20 +-
.../turbulencenoise/TurbulenceNoiseShader.kt | 36 +-
.../src/com/android/systemui/util/Dialog.kt | 3 +
systemUI/common/Android.bp | 11 +-
systemUI/common/README.md | 8 +-
systemUI/common/build.gradle | 3 +-
systemUI/log/Android.bp | 6 +-
systemUI/log/build.gradle | 3 +-
.../src/com/android/systemui/log/LogBuffer.kt | 14 +-
.../com/android/systemui/log/core/LogLevel.kt | 2 +-
systemUI/plugin/Android.bp | 27 +-
.../plugins/BcSmartspaceConfigPlugin.kt | 4 -
.../plugins/BcSmartspaceDataPlugin.java | 24 -
systemUI/plugin/build.gradle | 3 +-
.../systemui/plugins/ActivityStarter.java | 42 +-
.../systemui/plugins/DarkIconDispatcher.java | 3 -
.../systemui/plugins/VolumeDialog.java | 1 -
.../plugins/VolumeDialogController.java | 5 +-
.../systemui/plugins/clocks/AlarmData.kt | 6 +
.../plugins/clocks/ClockProviderPlugin.kt | 122 +
.../systemui/plugins/clocks/WeatherData.kt | 123 +
.../systemui/plugins/clocks/ZenData.kt | 22 +
.../plugins/log/TableLogBufferBase.kt | 12 +-
.../com/android/systemui/plugins/qs/QS.java | 40 +-
.../android/systemui/plugins/qs/QSTile.java | 49 +-
.../statusbar/NotificationMenuRowPlugin.java | 5 +-
systemUI/plugin_core/Android.bp | 65 +-
systemUI/plugin_core/build.gradle | 3 +-
systemUI/plugin_core/proguard.flags | 5 +-
.../com/android/systemui/plugins/Plugin.java | 3 -
systemUI/shared/Android.bp | 18 +-
systemUI/shared/build.gradle | 12 +-
systemUI/shared/res/values/bools.xml | 2 +-
.../compat/LawnchairQuickstepCompat.kt | 6 -
.../shared/condition/CombinedCondition.kt | 65 +-
.../shared/condition/ConditionExtensions.kt | 20 +-
.../pip/PipSurfaceTransactionHelper.java | 11 +-
.../shared/plugins/PluginEnabler.java | 3 +-
.../shared/plugins/PluginInstance.java | 133 +-
.../shared/plugins/PluginManagerImpl.java | 8 +-
.../shared/recents/ISystemUiProxy.aidl | 23 +-
.../systemui/shared/recents/model/Task.java | 93 +-
.../utilities/PreviewPositionHelper.java | 23 +-
.../shared/recents/utilities/Utilities.java | 60 +-
.../recents/view/RecentsTransition.java | 30 +
.../shared/regionsampling/RegionSampler.kt | 8 +-
.../rotation/FloatingRotationButton.java | 11 +-
.../rotation/FloatingRotationButtonView.java | 16 -
.../rotation/RotationButtonController.java | 40 +-
.../shared/shadow/DoubleShadowTextView.kt | 30 +-
.../shared/system/ActivityManagerWrapper.java | 155 +-
.../systemui/shared/system/BlurUtils.java | 4 +-
.../system/InteractionJankMonitorWrapper.java | 12 +-
.../shared/system/QuickStepContract.java | 95 +-
.../RecentsAnimationControllerCompat.java | 62 +-
.../system/RecentsAnimationListener.java | 22 +-
.../system/TaskStackChangeListeners.java | 8 +-
.../UncaughtExceptionPreHandlerManager.kt | 11 +-
systemUI/unfold/build.gradle | 8 +-
.../config/ResourceUnfoldTransitionConfig.kt | 46 +-
.../unfold/updates/DeviceFoldStateProvider.kt | 10 +-
.../unfold/updates/RotationChangeProvider.kt | 2 +-
systemUI/viewcapture/Android.bp | 23 +-
systemUI/viewcapture/AndroidManifest.xml | 7 +-
systemUI/viewcapture/OWNERS | 1 -
systemUI/viewcapture/README.md | 8 +-
systemUI/viewcapture/build.gradle | 13 +-
.../app/viewcapture/NoOpViewCapture.kt | 2 +-
.../viewcapture/SettingsAwareViewCapture.kt | 61 +-
.../android/app/viewcapture/ViewCapture.java | 360 +-
.../viewcapture/ViewCaptureDataSource.java | 30 +-
.../app/viewcapture/ViewCaptureFactory.kt | 76 +-
.../viewcapture/tests/AndroidManifest.xml | 5 -
.../SettingsAwareViewCaptureTest.kt | 8 +
tests/Android.bp | 58 +-
tests/AndroidManifest-common.xml | 45 +-
tests/AndroidManifest.xml | 4 +-
tests/Launcher3Tests.xml | 5 -
tests/assets/ReorderWidgets/full_reorder_case | 8 +-
tests/assets/ReorderWidgets/push_reorder_case | 20 +-
.../assets/ReorderWidgets/simple_reorder_case | 2 +-
.../flagged_result5x5to5x8.db | Bin 0 -> 77824 bytes
.../GridMigrationTest/result5x5to3x3.db | Bin 77824 -> 77824 bytes
.../GridMigrationTest/result5x5to4x7.db | Bin 77824 -> 77824 bytes
.../GridMigrationTest/result5x5to5x8.db | Bin 77824 -> 77824 bytes
.../DeviceProfileDumpTest/phonePortrait.txt | 8 +-
.../phonePortrait3Button.txt | 8 +-
.../phoneVerticalBar.txt | 8 +-
.../phoneVerticalBar3Button.txt | 8 +-
.../DeviceProfileDumpTest/tabletLandscape.txt | 2 -
.../tabletLandscape3Button.txt | 2 -
.../DeviceProfileDumpTest/tabletPortrait.txt | 2 -
.../tabletPortrait3Button.txt | 2 -
.../twoPanelLandscape.txt | 2 -
.../twoPanelLandscape3Button.txt | 2 -
...twoPanelLandscape3Button_decoupleDepth.txt | 2 -
.../twoPanelLandscape_decoupleDepth.txt | 2 -
.../twoPanelPortrait.txt | 2 -
.../twoPanelPortrait3Button.txt | 2 -
.../twoPanelPortrait3Button_decoupleDepth.txt | 2 -
.../twoPanelPortrait_decoupleDepth.txt | 2 -
.../shared/AndroidManifest.xml | 21 +
.../com/android/launcher3/testing/OWNERS | 1 +
.../shared/HotseatCellCenterRequest.java | 99 +
.../testing/shared/ResourceUtils.java | 85 +
.../shared/TestInformationRequest.java | 29 +
.../testing/shared/TestProtocol.java | 194 +
.../shared/WorkspaceCellCenterRequest.java | 138 +
.../launcher3/AbstractDeviceProfileTest.kt | 122 +-
.../AppWidgetsRestoredReceiverTest.kt | 4 +-
.../launcher3/AutoInstallsLayoutTest.kt | 31 +-
.../android/launcher3/DeleteDropTargetTest.kt | 28 -
.../FakeInvariantDeviceProfileTest.kt | 77 +-
.../android/launcher3/LauncherPrefsTest.kt | 61 +-
.../com/android/launcher3/UtilitiesTest.kt | 293 +-
.../allapps/AlphabeticalAppsListTest.java | 19 +-
.../celllayout/CellLayoutTestCaseReader.java | 2 +-
.../celllayout/FavoriteItemsTransaction.java | 14 +-
.../celllayout/HotseatReorderUnitTest.kt | 6 +-
.../celllayout/ReorderAlgorithmUnitTest.java | 8 +-
.../UnitTestCellLayoutBuilderRule.kt | 20 +-
.../celllayout/board/CellLayoutBoard.java | 32 +-
.../launcher3/celllayout/board/CellType.java | 32 +
.../celllayout/board/FolderPoint.java | 37 +
.../launcher3/celllayout/board/IconPoint.java | 45 +
.../board/IdenticalBoardComparator.kt | 6 +-
.../board/TestWorkspaceBuilder.java | 192 +
.../celllayout/board/WidgetRect.java | 59 +
.../launcher3/icons/IconCacheTest.java | 208 +-
.../launcher3/icons/UserBadgeDrawableTest.kt | 30 +-
.../launcher3/model/DatabaseHelperTest.kt | 22 +-
.../launcher3/model/FactitiousDbController.kt | 60 +
.../model/GridSizeMigrationUtilTest.kt | 772 +
.../launcher3/ui/BubbleTextViewTest.java | 162 +-
.../util/ActivityContextWrapper.java | 23 +-
.../launcher3/util/DisplayControllerTest.kt | 173 +-
.../launcher3/util/LauncherModelHelper.java | 92 +-
.../launcher3/util/LockedUserStateTest.kt | 20 +-
.../launcher3/util/ModelTestExtensions.kt | 32 +-
.../util/PackageManagerHelperTest.java | 86 +
.../util/TestSandboxModelContextWrapper.java | 22 +-
.../com/android/launcher3/util/TestUtil.java | 35 +-
.../android/launcher3/util/WidgetUtils.java | 22 +-
.../util/rule/TestStabilityRule.java | 5 +-
.../launcher3/widget/GeneratedPreviewTest.kt | 131 +-
.../LauncherAppWidgetProviderInfoTest.java | 26 +-
.../android/launcher3/widget/picker/OWNERS | 1 +
...getRecommendationCategoryProviderTest.java | 40 +-
...WidgetsListHeaderViewHolderBinderTest.java | 15 +-
.../WidgetsListTableViewHolderBinderTest.java | 16 +-
.../model/WidgetsListContentEntryTest.java | 9 +-
.../SimpleWidgetsSearchAlgorithmTest.java | 21 +-
.../util/WidgetPreviewContainerSizesTest.kt | 10 +-
.../picker/util/WidgetsTableUtilsTest.java | 30 +-
.../com/android/launcher3/testing/OWNERS | 4 +
.../android/launcher3/LauncherIntentTest.java | 19 +-
.../allapps/PrivateProfileManagerTest.java | 222 +
.../allapps/PrivateSpaceHeaderViewTest.java | 467 +
.../PrivateSpaceSettingsButtonTest.java | 56 +
.../allapps/TaplKeyboardFocusTest.java | 108 +
.../allapps/TaplOpenCloseAllAppsTest.java | 3 +
.../BackupAndRestoreDBSelectionTest.kt | 42 +-
.../celllayout/TaplReorderWidgetsTest.java | 312 +
.../ValidGridMigrationTestCaseGenerator.kt | 175 +
.../compat/TaplPromiseIconUiTest.java | 175 +
.../launcher3/dragging/TaplDragTest.java | 12 +-
.../dragging/TaplUninstallRemoveTest.java | 35 +-
.../folder/FolderNameProviderTest.java | 85 +
.../folder/PreviewBackgroundTest.java | 325 +
.../folder/PreviewItemManagerTest.kt | 223 +-
.../model/AddWorkspaceItemsTaskTest.kt | 225 +
.../launcher3/model/AsyncBindingTest.kt | 212 +
.../model/CacheDataUpdatedTaskTest.java | 161 +
.../model/DbDowngradeHelperTest.java | 234 +
.../model/DefaultLayoutProviderTest.java | 167 +
.../model/FirstScreenBroadcastHelperTest.kt | 386 +
.../launcher3/model/FolderIconLoadTest.kt | 184 +
.../launcher3/model/GridMigrationTest.kt | 180 +-
.../launcher3/model/LoaderCursorTest.java | 236 +
.../android/launcher3/model/LoaderTaskTest.kt | 548 +-
.../PackageInstallStateChangedTaskTest.java | 122 +
.../model/WorkspaceItemProcessorTest.kt | 847 +
.../model/WorkspaceItemSpaceFinderTest.kt | 179 +
.../model/gridmigration/GridMigrationUtils.kt | 114 +
.../ValidGridMigrationUnitTest.kt | 203 +
.../nonquickstep/DeviceProfileDumpTest.kt | 35 +-
.../launcher3/popup/SystemShortcutTest.java | 99 +-
.../launcher3/provider/RestoreDbTaskTest.java | 417 +
.../testcomponent/TouchEventGenerator.java | 275 +
.../touch/SingleAxisSwipeDetectorTest.java | 200 +
.../launcher3/ui/AbstractLauncherUiTest.java | 468 +-
.../launcher3/ui/PortraitLandscapeRunner.java | 14 -
.../launcher3/ui/TaplTestsLauncher3Test.java | 4 +-
.../launcher3/ui/TaplWorkProfileTest.java | 234 +
.../ui/widget/TaplAddConfigWidgetTest.java | 173 +
.../ui/widget/TaplAddWidgetTest.java | 14 +-
.../ui/widget/TaplBindWidgetTest.java | 319 +
.../ui/widget/TaplRequestPinItemTest.java | 195 +
.../ui/widget/TaplWidgetPickerTest.java | 86 +
.../ui/workspace/TaplThemeIconsTest.java | 177 +
.../workspace/TaplTwoPanelWorkspaceTest.java | 8 +
.../ui/workspace/TaplWorkspaceTest.java | 16 +-
.../src/com/android/launcher3/util/Wait.java | 66 +
.../rule/ExtendedLongPressTimeoutRule.java | 5 -
.../launcher3/util/rule/FailureWatcher.java | 4 +-
.../launcher3/util/rule/ShellCommandRule.java | 12 +-
.../android/launcher3/widget/picker/OWNERS | 1 +
.../com/android/launcher3/tapl/AppIcon.java | 13 +-
.../android/launcher3/tapl/AppIconMenu.java | 7 -
.../android/launcher3/tapl/Background.java | 36 +-
.../android/launcher3/tapl/BaseOverview.java | 166 +-
.../tapl/com/android/launcher3/tapl/Home.java | 3 +-
.../launcher3/tapl/KeyboardQuickSwitch.java | 26 -
.../android/launcher3/tapl/Launchable.java | 6 +
.../launcher3/tapl/LaunchedAppState.java | 15 -
.../tapl/LauncherInstrumentation.java | 253 +-
.../launcher3/tapl/LogEventChecker.java | 14 +-
.../com/android/launcher3/tapl/Overview.java | 7 +-
.../android/launcher3/tapl/OverviewTask.java | 144 +-
.../launcher3/tapl/OverviewTaskMenu.java | 31 +-
.../launcher3/tapl/OverviewTaskMenuItem.java | 39 +
.../com/android/launcher3/tapl/Taskbar.java | 19 +-
.../android/launcher3/tapl/TestHelpers.java | 7 +-
.../com/android/launcher3/tapl/Widgets.java | 74 +-
.../com/android/launcher3/tapl/Workspace.java | 63 +-
.../launcher3/tapl/WorkspaceDragSource.java | 6 +
wmshell/build.gradle | 18 +-
.../bubble_drop_target_background_color.xml | 2 +-
...de_maximize_menu_button_color_selector.xml | 2 +-
.../bubble_drop_target_background.xml | 2 +-
wmshell/res/drawable/bubble_manage_btn_bg.xml | 2 +-
.../res/drawable/bubble_manage_menu_bg.xml | 2 +-
.../res/drawable/decor_back_button_dark.xml | 1 -
...ecor_desktop_mode_maximize_button_dark.xml | 3 +-
wmshell/res/drawable/decor_handle_dark.xml | 24 +-
.../drawable/decor_maximize_button_dark.xml | 17 +-
...ktop_mode_decor_handle_menu_background.xml | 2 +-
.../desktop_mode_maximize_menu_background.xml | 2 +-
...p_mode_maximize_menu_layout_background.xml | 4 +-
...esktop_windowing_transition_background.xml | 6 +-
.../letterbox_education_dialog_background.xml | 2 +-
...ation_dismiss_button_background_ripple.xml | 2 +-
.../letterbox_education_ic_light_bulb.xml | 15 +-
.../letterbox_education_ic_reposition.xml | 14 +-
.../letterbox_education_ic_split_screen.xml | 6 +-
...erbox_restart_button_background_ripple.xml | 2 +-
.../letterbox_restart_dialog_background.xml | 2 +-
...start_dismiss_button_background_ripple.xml | 4 +-
.../letterbox_restart_header_ic_arrows.xml | 16 +-
.../res/layout/bubble_bar_expanded_view.xml | 3 +-
.../layout/bubble_bar_manage_education.xml | 28 +-
wmshell/res/layout/bubble_bar_menu_item.xml | 3 +-
wmshell/res/layout/bubble_bar_menu_view.xml | 20 +-
.../res/layout/bubble_bar_stack_education.xml | 24 +-
wmshell/res/layout/bubble_flyout.xml | 6 +-
wmshell/res/layout/bubble_manage_button.xml | 4 +-
wmshell/res/layout/bubble_manage_menu.xml | 41 +-
wmshell/res/layout/caption_window_decor.xml | 3 +
wmshell/res/layout/compat_ui_layout.xml | 32 +
.../res/layout/desktop_mode_app_handle.xml | 4 +-
.../res/layout/desktop_mode_app_header.xml | 36 +-
.../desktop_mode_window_decor_handle_menu.xml | 150 +-
...esktop_mode_window_decor_maximize_menu.xml | 212 +-
...tterbox_education_dialog_action_layout.xml | 10 +-
.../letterbox_education_dialog_layout.xml | 19 +-
.../letterbox_restart_dialog_layout.xml | 24 +-
wmshell/res/layout/maximize_menu_button.xml | 20 +-
wmshell/res/values-af/strings.xml | 64 +-
wmshell/res/values-am/strings.xml | 56 +-
wmshell/res/values-ar/strings.xml | 56 +-
wmshell/res/values-as/strings.xml | 56 +-
wmshell/res/values-az/strings.xml | 56 +-
wmshell/res/values-b+sr+Latn/strings.xml | 56 +-
wmshell/res/values-be/strings.xml | 58 +-
wmshell/res/values-bg/strings.xml | 56 +-
wmshell/res/values-bn/strings.xml | 56 +-
wmshell/res/values-bs/strings.xml | 58 +-
wmshell/res/values-ca/strings.xml | 56 +-
wmshell/res/values-cs/strings.xml | 56 +-
wmshell/res/values-da/strings.xml | 60 +-
wmshell/res/values-de/strings.xml | 56 +-
wmshell/res/values-el/strings.xml | 56 +-
wmshell/res/values-en-rAU/strings.xml | 56 +-
wmshell/res/values-en-rCA/strings.xml | 56 +-
wmshell/res/values-en-rGB/strings.xml | 56 +-
wmshell/res/values-en-rIN/strings.xml | 56 +-
wmshell/res/values-en-rXC/strings.xml | 24 +-
wmshell/res/values-es-rUS/strings.xml | 56 +-
wmshell/res/values-es/strings.xml | 56 +-
wmshell/res/values-et/strings.xml | 56 +-
wmshell/res/values-eu/strings.xml | 58 +-
wmshell/res/values-fa/strings.xml | 60 +-
wmshell/res/values-fa/strings_tv.xml | 2 +-
wmshell/res/values-fi/strings.xml | 56 +-
wmshell/res/values-fr-rCA/strings.xml | 58 +-
wmshell/res/values-fr/strings.xml | 56 +-
wmshell/res/values-gl/strings.xml | 56 +-
wmshell/res/values-gu/strings.xml | 56 +-
wmshell/res/values-hi/strings.xml | 58 +-
wmshell/res/values-hr/strings.xml | 56 +-
wmshell/res/values-hu/strings.xml | 56 +-
wmshell/res/values-hy/strings.xml | 60 +-
wmshell/res/values-in/strings.xml | 56 +-
wmshell/res/values-is/strings.xml | 56 +-
wmshell/res/values-it/strings.xml | 60 +-
wmshell/res/values-iw/strings.xml | 82 +-
wmshell/res/values-ja/strings.xml | 58 +-
wmshell/res/values-ka/strings.xml | 56 +-
wmshell/res/values-kk/strings.xml | 56 +-
wmshell/res/values-km/strings.xml | 56 +-
wmshell/res/values-kn/strings.xml | 68 +-
wmshell/res/values-kn/strings_tv.xml | 2 +-
wmshell/res/values-ko/strings.xml | 56 +-
wmshell/res/values-ky/strings.xml | 56 +-
wmshell/res/values-lo/strings.xml | 56 +-
wmshell/res/values-lt/strings.xml | 56 +-
wmshell/res/values-lv/strings.xml | 56 +-
wmshell/res/values-mk/strings.xml | 56 +-
wmshell/res/values-ml/strings.xml | 56 +-
wmshell/res/values-mn/strings.xml | 56 +-
wmshell/res/values-mr/strings.xml | 56 +-
wmshell/res/values-ms/strings.xml | 56 +-
wmshell/res/values-my/strings.xml | 56 +-
wmshell/res/values-nb/strings.xml | 56 +-
wmshell/res/values-ne/strings.xml | 56 +-
wmshell/res/values-nl/strings.xml | 58 +-
wmshell/res/values-or/strings.xml | 56 +-
wmshell/res/values-pa/strings.xml | 56 +-
wmshell/res/values-pl/strings.xml | 56 +-
wmshell/res/values-pt-rBR/strings.xml | 62 +-
wmshell/res/values-pt-rPT/strings.xml | 56 +-
wmshell/res/values-pt/strings.xml | 62 +-
wmshell/res/values-ro/strings.xml | 56 +-
wmshell/res/values-ru/strings.xml | 56 +-
wmshell/res/values-si/strings.xml | 56 +-
wmshell/res/values-sk/strings.xml | 56 +-
wmshell/res/values-sl/strings.xml | 56 +-
wmshell/res/values-sq/strings.xml | 56 +-
wmshell/res/values-sr/strings.xml | 56 +-
wmshell/res/values-sv/strings.xml | 56 +-
wmshell/res/values-sw/strings.xml | 56 +-
wmshell/res/values-ta/strings.xml | 56 +-
wmshell/res/values-te/strings.xml | 60 +-
wmshell/res/values-th/strings.xml | 56 +-
wmshell/res/values-tl/strings.xml | 56 +-
wmshell/res/values-tr/strings.xml | 56 +-
wmshell/res/values-uk/strings.xml | 56 +-
wmshell/res/values-ur/strings.xml | 56 +-
wmshell/res/values-uz/strings.xml | 56 +-
wmshell/res/values-vi/strings.xml | 56 +-
wmshell/res/values-zh-rCN/strings.xml | 56 +-
wmshell/res/values-zh-rHK/strings.xml | 56 +-
wmshell/res/values-zh-rTW/strings.xml | 56 +-
wmshell/res/values-zu/strings.xml | 56 +-
wmshell/res/values/attrs.xml | 7 -
wmshell/res/values/colors.xml | 7 +-
wmshell/res/values/config.xml | 11 +-
wmshell/res/values/dimen.xml | 206 +-
wmshell/res/values/ids.xml | 8 -
wmshell/res/values/integers.xml | 12 -
wmshell/res/values/strings.xml | 105 +-
wmshell/res/values/strings_tv.xml | 2 -
wmshell/res/values/styles.xml | 45 +-
.../shell/shared/IHomeTransitionListener.aidl | 33 +
.../wm/shell/shared/IShellTransitions.aidl | 62 +
.../wm/shell/shared/ShellTransitions.java | 13 -
.../wm/shell/shared/TransitionUtil.java | 139 +-
.../shell/shared/animation/PhysicsAnimator.kt | 5 -
.../animation/PhysicsAnimatorTestUtils.kt | 30 +-
.../wm/shell/bubbles/BubbleStackView.java | 2 +-
.../ExpandedAnimationController.java | 2 +-
.../animation/StackAnimationController.java | 2 +-
.../bubbles/bar/BubbleBarAnimationHelper.java | 2 +-
.../BubbleBarExpandedViewDragController.kt | 2 +-
.../DesktopModeTransitionSource.aidl | 4 +-
.../DesktopModeTransitionSource.kt | 2 +-
.../common/magnetictarget/MagnetizedObject.kt | 4 +-
.../wm/shell/dagger/WMShellBaseModule.java | 7 +-
.../wm/shell/desktopmode/DesktopMode.java | 2 +-
.../DesktopModeShellCommandHandler.kt | 2 +-
.../desktopmode/DesktopModeTransitionTypes.kt | 2 +-
.../desktopmode/DesktopTasksController.kt | 2 +-
.../EnterDesktopTaskTransitionHandler.java | 2 +-
.../ExitDesktopTaskTransitionHandler.java | 2 +-
.../wm/shell/desktopmode/IDesktopMode.aidl | 4 +-
...PipAccessibilityInteractionConnection.java | 2 +-
.../pip/phone/PipDismissTargetHandler.java | 2 +-
.../wm/shell/pip/phone/PipMotionHelper.java | 2 +-
.../pip2/phone/PipDismissTargetHandler.java | 2 +-
.../wm/shell/pip2/phone/PipMotionHelper.java | 2 +-
.../DesktopModeWindowDecorViewModel.java | 2 +-
.../magnetictarget/MagnetizedObjectTest.kt | 4 +-
.../DesktopModeTransitionTypesTest.kt | 10 +-
.../desktopmode/DesktopTasksControllerTest.kt | 2 +-
.../ExitDesktopTaskTransitionHandlerTest.java | 2 +-
1577 files changed, 112563 insertions(+), 80248 deletions(-)
create mode 100644 lawnchair/res/drawable/ic_work_app_badge.xml
create mode 100644 lawnchair/res/font/inter_bold.ttf
create mode 100644 lawnchair/res/font/inter_medium.ttf
create mode 100644 lawnchair/res/font/inter_regular.ttf
create mode 100644 lawnchair/res/font/inter_semi_bold.ttf
create mode 100644 lawnchair/src/app/lawnchair/LauncherActivityCachingLogic.kt
create mode 100644 quickstep/res/drawable/bg_bubble_dismiss_circle.xml
create mode 100644 quickstep/res/drawable/bg_circle.xml
create mode 100644 quickstep/res/drawable/ic_bubble_dismiss_white.xml
create mode 100644 quickstep/res/drawable/keyboard_quick_switch_overview_button_background.xml
create mode 100644 quickstep/res/layout/keyboard_quick_switch_textonly_taskview.xml
create mode 100644 quickstep/res/raw-h480dp/all_set_page_bg.json
create mode 100644 quickstep/res/raw-land/all_set_page_bg.json
create mode 100644 quickstep/res/raw-sw600dp-land/all_set_page_bg.json
create mode 100644 quickstep/res/raw-sw600dp/all_set_page_bg.json
create mode 100644 quickstep/res/raw-sw720dp-land/all_set_page_bg.json
create mode 100644 quickstep/res/raw-sw720dp/all_set_page_bg.json
create mode 100644 quickstep/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsFallbackSearchContainer.java
create mode 100644 quickstep/src/com/android/launcher3/uioverrides/BaseRecentsViewStateController.java
create mode 100644 quickstep/src/com/android/launcher3/uioverrides/QuickstepAppWidgetHost.java
create mode 100644 quickstep/src/com/android/launcher3/uioverrides/RecentsViewStateController.java
create mode 100644 quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/TaskViewTouchController.java
create mode 100644 quickstep/src/com/android/quickstep/OverviewCommandHelper.java
create mode 100644 quickstep/src/com/android/quickstep/TaskThumbnailCache.java
create mode 100644 quickstep/src/com/android/quickstep/fallback/RecentsTaskController.java
create mode 100644 quickstep/src/com/android/quickstep/inputconsumers/ResetGestureInputConsumer.java
create mode 100644 quickstep/src/com/android/quickstep/interaction/TutorialStepIndicator.java
create mode 100644 quickstep/src/com/android/quickstep/orientation/PortraitPagedViewHandler.java
create mode 100644 quickstep/src/com/android/quickstep/task/thumbnail/TaskThumbnailViewModel.kt
create mode 100644 quickstep/src/com/android/quickstep/task/viewmodel/TaskViewData.kt
create mode 100644 quickstep/src/com/android/quickstep/util/ActiveGestureErrorDetector.java
create mode 100644 quickstep/src/com/android/quickstep/util/ActiveGestureLog.java
create mode 100644 quickstep/src/com/android/quickstep/util/ActivityInitListener.java
create mode 100644 quickstep/src/com/android/quickstep/util/AssistStateManager.java
create mode 100644 quickstep/src/com/android/quickstep/util/AssistUtils.java
create mode 100644 quickstep/src/com/android/quickstep/util/DesktopTask.java
create mode 100644 quickstep/src/com/android/quickstep/util/GroupTask.java
create mode 100644 quickstep/src/com/android/quickstep/util/TaskGridNavHelper.java
create mode 100644 quickstep/src/com/android/quickstep/views/IconAppChipView.java
create mode 100644 quickstep/src/com/android/quickstep/views/IconView.java
create mode 100644 quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/TaskbarUnitTestRule.kt
create mode 100644 quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/bubbles/animation/BubbleBarViewAnimatorTest.kt
create mode 100644 quickstep/tests/multivalentTests/src/com/android/quickstep/task/thumbnail/TaskThumbnailViewModelTest.kt
create mode 100644 quickstep/tests/multivalentTests/src/com/android/quickstep/util/TaskGridNavHelperTest.java
create mode 100644 quickstep/tests/src/com/android/launcher3/model/QuickstepModelDelegateTest.kt
create mode 100644 quickstep/tests/src/com/android/launcher3/model/WidgetsPredictionsRequesterTest.kt
create mode 100644 quickstep/tests/src/com/android/launcher3/taskbar/FallbackTaskbarUIControllerTest.kt
create mode 100644 quickstep/tests/src/com/android/launcher3/taskbar/TaskbarBaseTestCase.kt
create mode 100644 quickstep/tests/src/com/android/launcher3/taskbar/TaskbarHoverToolTipControllerTest.java
create mode 100644 quickstep/tests/src/com/android/launcher3/taskbar/TaskbarKeyguardControllerTest.kt
create mode 100644 quickstep/tests/src/com/android/launcher3/taskbar/TaskbarRecentAppsControllerTest.kt
create mode 100644 quickstep/tests/src/com/android/quickstep/RecentTasksListTest.java
create mode 100644 quickstep/tests/src/com/android/quickstep/RecentsAnimationDeviceStateTest.kt
create mode 100644 quickstep/tests/src/com/android/quickstep/RecentsModelTest.java
create mode 100644 quickstep/tests/src/com/android/quickstep/TaplDigitalWellBeingToastTest.java
create mode 100644 quickstep/tests/src/com/android/quickstep/TaskThumbnailCacheTest.java
create mode 100644 quickstep/tests/src/com/android/quickstep/taskbar/controllers/TaskbarPinningControllerTest.kt
create mode 100644 quickstep/tests/src/com/android/quickstep/taskbar/customization/TaskbarSpecsEvaluatorTest.kt
create mode 100644 quickstep/tests/src/com/android/quickstep/util/GestureExclusionManagerTest.kt
create mode 100644 res/anim-v33/shared_x_axis_activity_close_enter.xml
create mode 100644 res/anim-v33/shared_x_axis_activity_close_exit.xml
create mode 100644 res/anim-v33/shared_x_axis_activity_open_enter.xml
create mode 100644 res/anim-v33/shared_x_axis_activity_open_exit.xml
create mode 100644 res/color-night-v31/material_color_surface.xml
create mode 100644 res/color-night-v31/material_color_surface_bright.xml
create mode 100644 res/color-night-v31/material_color_surface_container.xml
create mode 100644 res/color-night-v31/material_color_surface_container_high.xml
create mode 100644 res/color-night-v31/material_color_surface_container_highest.xml
create mode 100644 res/color-night-v31/material_color_surface_container_low.xml
create mode 100644 res/color-night-v31/material_color_surface_dim.xml
create mode 100644 res/color-night-v31/material_color_surface_inverse.xml
create mode 100644 res/color-night-v31/material_color_surface_variant.xml
create mode 100644 res/color-night-v31/popup_color_background.xml
create mode 100644 res/color-v31/material_color_surface.xml
create mode 100644 res/color-v31/material_color_surface_bright.xml
create mode 100644 res/color-v31/material_color_surface_container.xml
create mode 100644 res/color-v31/material_color_surface_container_high.xml
create mode 100644 res/color-v31/material_color_surface_container_highest.xml
create mode 100644 res/color-v31/material_color_surface_container_low.xml
create mode 100644 res/color-v31/material_color_surface_dim.xml
create mode 100644 res/color-v31/material_color_surface_inverse.xml
create mode 100644 res/color-v31/material_color_surface_variant.xml
create mode 100644 res/color-v31/popup_color_background.xml
create mode 100644 res/color/popup_color_background.xml
create mode 100644 res/drawable-sw720dp/ic_transient_taskbar_all_apps_button.xml
create mode 100644 res/drawable/ic_taskbar_all_apps_button.xml
create mode 100644 res/drawable/ic_transient_taskbar_all_apps_button.xml
create mode 100644 res/layout/page_indicator_dots.xml
create mode 100644 res/values-v33/style.xml
create mode 100644 res/xml/folder_shapes.xml
create mode 100644 src/com/android/launcher3/accessibility/AccessibleDragListenerAdapter.java
create mode 100644 src/com/android/launcher3/dragndrop/SpringLoadedDragController.java
create mode 100644 src/com/android/launcher3/icons/ComponentWithLabel.java
create mode 100644 src/com/android/launcher3/icons/MonochromeIconFactory.java
create mode 100644 src/com/android/launcher3/model/GridSizeMigrationUtil.java
create mode 100644 src/com/android/launcher3/model/ShortcutsChangedTask.java
create mode 100644 src/com/android/launcher3/pageindicators/WorkspacePageIndicator.java
create mode 100644 src/com/android/launcher3/util/ActivityTracker.java
create mode 100644 src/com/android/launcher3/util/LauncherBindableItemsContainer.java
create mode 100644 src/com/android/launcher3/util/LooperExecutor.java
create mode 100644 src/com/android/launcher3/util/window/RefreshRateTracker.java
create mode 100644 src/com/android/launcher3/views/ComposeInitializer.java
create mode 100644 systemUI/plugin/src/com/android/systemui/plugins/clocks/AlarmData.kt
create mode 100644 systemUI/plugin/src/com/android/systemui/plugins/clocks/ClockProviderPlugin.kt
create mode 100644 systemUI/plugin/src/com/android/systemui/plugins/clocks/WeatherData.kt
create mode 100644 systemUI/plugin/src/com/android/systemui/plugins/clocks/ZenData.kt
create mode 100644 tests/assets/databases/GridMigrationTest/flagged_result5x5to5x8.db
create mode 100644 tests/multivalentTests/shared/AndroidManifest.xml
create mode 100644 tests/multivalentTests/shared/com/android/launcher3/testing/shared/HotseatCellCenterRequest.java
create mode 100644 tests/multivalentTests/shared/com/android/launcher3/testing/shared/ResourceUtils.java
create mode 100644 tests/multivalentTests/shared/com/android/launcher3/testing/shared/TestInformationRequest.java
create mode 100644 tests/multivalentTests/shared/com/android/launcher3/testing/shared/TestProtocol.java
create mode 100644 tests/multivalentTests/shared/com/android/launcher3/testing/shared/WorkspaceCellCenterRequest.java
create mode 100644 tests/multivalentTests/src/com/android/launcher3/celllayout/board/CellType.java
create mode 100644 tests/multivalentTests/src/com/android/launcher3/celllayout/board/FolderPoint.java
create mode 100644 tests/multivalentTests/src/com/android/launcher3/celllayout/board/IconPoint.java
create mode 100644 tests/multivalentTests/src/com/android/launcher3/celllayout/board/TestWorkspaceBuilder.java
create mode 100644 tests/multivalentTests/src/com/android/launcher3/celllayout/board/WidgetRect.java
create mode 100644 tests/multivalentTests/src/com/android/launcher3/model/FactitiousDbController.kt
create mode 100644 tests/multivalentTests/src/com/android/launcher3/model/GridSizeMigrationUtilTest.kt
create mode 100644 tests/multivalentTests/src/com/android/launcher3/util/PackageManagerHelperTest.java
create mode 100644 tests/shared/com/android/launcher3/testing/OWNERS
create mode 100644 tests/src/com/android/launcher3/allapps/PrivateProfileManagerTest.java
create mode 100644 tests/src/com/android/launcher3/allapps/PrivateSpaceHeaderViewTest.java
create mode 100644 tests/src/com/android/launcher3/allapps/PrivateSpaceSettingsButtonTest.java
create mode 100644 tests/src/com/android/launcher3/allapps/TaplKeyboardFocusTest.java
create mode 100644 tests/src/com/android/launcher3/celllayout/TaplReorderWidgetsTest.java
create mode 100644 tests/src/com/android/launcher3/celllayout/testgenerator/ValidGridMigrationTestCaseGenerator.kt
create mode 100644 tests/src/com/android/launcher3/compat/TaplPromiseIconUiTest.java
create mode 100644 tests/src/com/android/launcher3/folder/FolderNameProviderTest.java
create mode 100644 tests/src/com/android/launcher3/folder/PreviewBackgroundTest.java
create mode 100644 tests/src/com/android/launcher3/model/AddWorkspaceItemsTaskTest.kt
create mode 100644 tests/src/com/android/launcher3/model/AsyncBindingTest.kt
create mode 100644 tests/src/com/android/launcher3/model/CacheDataUpdatedTaskTest.java
create mode 100644 tests/src/com/android/launcher3/model/DbDowngradeHelperTest.java
create mode 100644 tests/src/com/android/launcher3/model/DefaultLayoutProviderTest.java
create mode 100644 tests/src/com/android/launcher3/model/FirstScreenBroadcastHelperTest.kt
create mode 100644 tests/src/com/android/launcher3/model/FolderIconLoadTest.kt
create mode 100644 tests/src/com/android/launcher3/model/LoaderCursorTest.java
create mode 100644 tests/src/com/android/launcher3/model/PackageInstallStateChangedTaskTest.java
create mode 100644 tests/src/com/android/launcher3/model/WorkspaceItemProcessorTest.kt
create mode 100644 tests/src/com/android/launcher3/model/WorkspaceItemSpaceFinderTest.kt
create mode 100644 tests/src/com/android/launcher3/model/gridmigration/GridMigrationUtils.kt
create mode 100644 tests/src/com/android/launcher3/model/gridmigration/ValidGridMigrationUnitTest.kt
create mode 100644 tests/src/com/android/launcher3/provider/RestoreDbTaskTest.java
create mode 100644 tests/src/com/android/launcher3/testcomponent/TouchEventGenerator.java
create mode 100644 tests/src/com/android/launcher3/touch/SingleAxisSwipeDetectorTest.java
create mode 100644 tests/src/com/android/launcher3/ui/TaplWorkProfileTest.java
create mode 100644 tests/src/com/android/launcher3/ui/widget/TaplAddConfigWidgetTest.java
create mode 100644 tests/src/com/android/launcher3/ui/widget/TaplBindWidgetTest.java
create mode 100644 tests/src/com/android/launcher3/ui/widget/TaplRequestPinItemTest.java
create mode 100644 tests/src/com/android/launcher3/ui/widget/TaplWidgetPickerTest.java
create mode 100644 tests/src/com/android/launcher3/ui/workspace/TaplThemeIconsTest.java
create mode 100644 tests/src/com/android/launcher3/util/Wait.java
create mode 100644 tests/tapl/com/android/launcher3/tapl/OverviewTaskMenuItem.java
create mode 100644 wmshell/shared/src/com/android/wm/shell/shared/IHomeTransitionListener.aidl
create mode 100644 wmshell/shared/src/com/android/wm/shell/shared/IShellTransitions.aidl
diff --git a/.github/release.yml b/.github/release.yml
index d15e13133a..968b64dcc2 100644
--- a/.github/release.yml
+++ b/.github/release.yml
@@ -3,7 +3,7 @@ changelog:
labels:
- bot
authors:
- - renovate[bot]
+ - renovate
- lawnchair-bot
- crowdin-bot
categories:
@@ -18,3 +18,6 @@ changelog:
- title: 🧹 Housekeeping
labels:
- housekeeping
+ - title: 🧑💻 Dependencies
+ labels:
+ - dependencies
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index c0eaf5a72c..ef32b63e95 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 assembleLawnWithQuickstepNightlyRelease assembleLawnWithQuickstepGithubDebug assembleLawnWithQuickstepPlayDebug --no-configuration-cache
+ run: ./gradlew assembleLawnWithQuickstepGithubDebug assembleLawnWithQuickstepPlayDebug assembleLawnWithQuickstepNightlyRelease --no-configuration-cache
- name: Upload artifact
uses: actions/upload-artifact@v6
with:
@@ -118,8 +118,7 @@ jobs:
nightly-release:
runs-on: ubuntu-latest
- if: false
- # if: github.repository_owner == 'LawnchairLauncher' && github.event_name == 'push' && github.ref == 'refs/heads/15-dev'
+ 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 043c6a8bdc..123e8e8435 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: 16-dev-localization
+ localization_branch_name: 15-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 ac393db7f4..19fe5136d6 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: 16-dev-localization
+ localization_branch_name: 15-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 83091af2a6..f85f080306 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: 16-dev-localization
+ localization_branch_name: 15-dev-localization
create_pull_request: false
base_url: 'https://lawnchair.crowdin.com'
env:
diff --git a/.gitmodules b/.gitmodules
index f2284aca65..cf7551ac41 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,4 +1,3 @@
[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 2c4fb37908..eb033ee0da 100644
--- a/Android.bp
+++ b/Android.bp
@@ -17,19 +17,7 @@ package {
default_applicable_licenses: ["Android-Apache-2.0"],
}
-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",
- ],
-}
+min_launcher3_sdk_version = "30"
// 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
@@ -43,122 +31,12 @@ 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",
- ],
-}
-
// Source code for quickstep build, on top of launcher-src
filegroup {
name: "launcher-quickstep-src",
srcs: [
- "quickstep/src/**/*.kt",
"quickstep/src/**/*.java",
- ],
- device_common_srcs: [
- ":launcher-quickstep-processed-protolog-src",
- ],
-}
-
-// 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-type proto " +
- "--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",
+ "quickstep/src/**/*.kt",
],
}
@@ -185,118 +63,10 @@ filegroup {
srcs: ["proguard.flags"],
}
-// 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",
- ],
-}
-
-// Opt-in configuration for Launcher Quickstep code depending on Jetpack Compose.
-soong_config_bool_variable {
- name: "release_enable_compose_in_launcher",
-}
-
-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",
- ],
-}
-
-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: [
- "static_libs",
- ],
-}
-
-launcher_compose_java_defaults {
- name: "launcher_compose_defaults",
- soong_config_variables: {
- release_enable_compose_in_launcher: {
- srcs: [
- ":launcher-compose-enabled-src",
- ],
-
- // Compose dependencies
- static_libs: [
- "androidx.compose.runtime_runtime",
- "androidx.compose.material3_material3",
- ],
-
- // By default, Compose is disabled and we compile the ComposeFacade
- // in compose/launcher3/facade/disabled/.
- conditions_default: {
- srcs: [
- ":launcher-compose-disabled-src",
- ],
- 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",
- ],
-
- // 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: [],
- },
- },
- },
-}
-
-launcher_compose_tests_java_defaults {
- name: "launcher_compose_tests_defaults",
- soong_config_variables: {
- release_enable_compose_in_launcher: {
- // Compose dependencies
- static_libs: [
- "androidx.compose.runtime_runtime",
- "androidx.compose.ui_ui-test-junit4",
- "androidx.compose.ui_ui-test-manifest",
- ],
-
- conditions_default: {
- static_libs: [],
- },
- },
- },
-}
-
android_library {
name: "launcher-aosp-tapl",
libs: [
- "framework-statsd.stubs.module_lib",
+ "framework-statsd",
],
static_libs: [
"androidx.annotation_annotation",
@@ -306,7 +76,6 @@ android_library {
"androidx.preference_preference",
"SystemUISharedLib",
"//frameworks/libs/systemui:animationlib",
- "//frameworks/libs/systemui:contextualeducationlib",
"launcher-testing-shared",
],
srcs: [
@@ -367,14 +136,12 @@ java_library {
// Library with all the dependencies for building Launcher3
android_library {
name: "Launcher3ResLib",
- defaults: [
- "launcher_compose_defaults",
- ],
srcs: [],
resource_dirs: ["res"],
static_libs: [
"LauncherPluginLib",
"launcher_quickstep_log_protos_lite",
+ "android.os.flags-aconfig-java",
"androidx-constraintlayout_constraintlayout",
"androidx.recyclerview_recyclerview",
"androidx.dynamicanimation_dynamicanimation",
@@ -387,10 +154,7 @@ android_library {
"//frameworks/libs/systemui:iconloader_base",
"//frameworks/libs/systemui:view_capture",
"//frameworks/libs/systemui:animationlib",
- "//frameworks/libs/systemui:contextualeducationlib",
- "//frameworks/libs/systemui:msdl",
"SystemUI-statsd",
- "WindowManager-Shell-shared-AOSP",
"launcher-testing-shared",
"androidx.lifecycle_lifecycle-common-java8",
"androidx.lifecycle_lifecycle-extensions",
@@ -399,9 +163,8 @@ android_library {
"kotlinx_coroutines",
"com_android_launcher3_flags_lib",
"com_android_wm_shell_flags_lib",
- "dagger2",
- "jsr330",
- "com_android_systemui_shared_flags_lib",
+ "android.appwidget.flags-aconfig-java",
+ "com.android.window.flags.window-aconfig-java",
],
manifest: "AndroidManifest-common.xml",
sdk_version: "current",
@@ -409,9 +172,6 @@ android_library {
lint: {
baseline_filename: "lint-baseline.xml",
},
- flags_packages: [
- "com_android_launcher3_flags",
- ],
}
//
@@ -419,7 +179,6 @@ android_library {
//
android_app {
name: "Launcher3",
- defaults: ["launcher-non-platform-apis-defaults"],
static_libs: [
"Launcher3ResLib",
@@ -431,7 +190,7 @@ android_app {
],
optimize: {
- proguard_flags_files: [":launcher-proguard-rules"],
+ proguard_flags_files: ["proguard.pro"],
// Proguard is disable for testing. Derivarive prjects to keep proguard enabled
enabled: false,
},
@@ -439,7 +198,6 @@ 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,
@@ -456,12 +214,8 @@ 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
@@ -472,34 +226,24 @@ android_library {
"quickstep/res",
],
libs: [
- "framework-statsd.stubs.module_lib",
+ "framework-statsd",
],
static_libs: [
"Launcher3ResLib",
"lottie",
"SystemUISharedLib",
"SettingsLibSettingsTheme",
- "dagger2",
- "protolog-group",
],
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",
],
@@ -514,10 +258,7 @@ android_library {
"QuickstepResLib",
"androidx.room_room-runtime",
],
- plugins: [
- "androidx.room_room-compiler-plugin",
- "dagger2-compiler",
- ],
+ plugins: ["androidx.room_room-compiler-plugin"],
manifest: "quickstep/AndroidManifest.xml",
additional_manifests: [
"go/AndroidManifest.xml",
@@ -526,27 +267,19 @@ 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.stubs.module_lib",
+ "framework-statsd",
],
// Note the ordering here is important when it comes to resource
// overriding. We want the most specific resource overrides defined
@@ -558,23 +291,18 @@ 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: {
- proguard_flags_files: [":launcher-proguard-rules"],
- enabled: true,
- shrink_resources: true,
+ enabled: false,
},
platform_apis: true,
@@ -588,10 +316,7 @@ android_app {
"Launcher2",
"Launcher3",
],
- required: [
- "privapp_whitelist_com.android.launcher3",
- "launcher.quickstep.protolog.pb",
- ],
+ required: ["privapp_whitelist_com.android.launcher3"],
resource_dirs: ["quickstep/res"],
@@ -607,11 +332,13 @@ 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: [],
@@ -622,7 +349,6 @@ android_app {
optimize: {
proguard_flags_files: ["proguard.flags"],
enabled: true,
- shrink_resources: true,
},
privileged: true,
@@ -646,9 +372,9 @@ android_app {
include_filter: ["com.android.launcher3.*"],
},
}
-
android_app {
name: "Launcher3QuickStepGo",
+
static_libs: ["Launcher3GoLib"],
resource_dirs: [],
@@ -659,7 +385,6 @@ 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 da43ea0bc6..e8fa644e1f 100644
--- a/AndroidManifest-common.xml
+++ b/AndroidManifest-common.xml
@@ -136,11 +136,13 @@
android:writePermission="${applicationId}.permission.WRITE_SETTINGS"
android:readPermission="${applicationId}.permission.READ_SETTINGS" />
-
+
[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/16-dev/lawnchair
-[src-package]: https://github.com/LawnchairLauncher/lawnchair/tree/16-dev/src
+[lawnchair-package]: https://github.com/LawnchairLauncher/lawnchair/tree/15-dev/lawnchair
+[src-package]: https://github.com/LawnchairLauncher/lawnchair/tree/15-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
-
diff --git a/GITHUB_CHANGELOG.md b/GITHUB_CHANGELOG.md
index 22c3c4a419..775e6e3f0f 100644
--- a/GITHUB_CHANGELOG.md
+++ b/GITHUB_CHANGELOG.md
@@ -1,349 +1,47 @@
-Lawnchair 16 pE Development 3 is here! Contributors are encouraged to target this branch instead of
-older (i.e., Lawnchair `15-dev`).
+> [!TIP]
+> For the story behind this release, see [the announcement](https://lawnchair.app/blog/lawnchair-15-beta-1) on our website.
-### 🏗️ Development 3 Release 3
+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.
-Build: BD3.1312 (latest), BD3.0812, BD3.0712
+### 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.*
-Compatibility list:
+### 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.
-| 🏗️ Crash | 🥞 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 |
+### 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.
-#### Features
-* [Lawnchair] Features from Lawnchair 15-dev 07122025
-* [Launcher] Google Sans Flex font uses almost the exact same configuration as Pixel
-* [Launcher] Enable bulk loading by default
-* [Launcher] Tablet support (ish)
-* [Launcher] Refreshed Material 3 Expressive
-* [Lawnchair] Refreshed Material 3 Expressive
-* [Launcher] Foldable support (ish)
-* [Lawnchair] Warn when nightly updater is updating to next major version
-* [Lawnchair/Smartspace] Add Lunar calendar option
-* [Lawnchair/Smartspace] Promote smartspace calendar to stable
-* [Lawnchair] Expressive redesign Phase 2
-* [Lawnchair] GestureNavContract toggle in experimental features
-* [Lawnchair] Set GestureNavContract on by default on Google device
-* [Lawnchair] Set GestureNavContract on by default on Nothing device
-* [Lawnchair] Don't show warning on known compatible device
-* [Lawnchair] Swipe to dismiss announcement perform haptic on successful dismiss
-* [Lawnchair] Remove Inter v3 fonts from Lawnchair entirely (to reduce apk size)
-* [Lawnchair] Add Google Sans variable font as fallback to Google Sans Flex (to support the most of the world languages, yes that increases sizes)
-* [Launcher] Google Sans variable normal style
-* [Lawnchair] Improve Google device compatibility check
-* [Lawnchair] Improve Samsung device compatibility check
+### 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.
-#### Fixes
-* [Launcher3] Widget preview crash for no reason at all on compatible Android version
-* [Launcher] Hotseat Google provider failed to open due to Android pending intent restrictions on Android 14/15/16/16.1
-* [Launcher3/DeviceProfile] Positioning of first folder during Lawnchair setup
-* [Lawnchair/AllApps] Reimplement app drawer opacity
-* [Lawnchair/Recents] Reimplement recents overview opacity
-* [Lawnchair/Preference] Misaligned slider and text preference
-* [Lawnchair/Smartspace] Allow disabling the smartspace feature
-* [Lawnchair] Settings now correctly animate expand/shrink items
-* [Lawnchair] Correctly display warning in experimental features (race conditions)
-* [Project] Support for Android Studio 2025.2.3 Canary 5 (Bump to AGP 9.0.0-beta05)
-* [Lawnchair] Offer a toggle to disable/enable suggestions instead of linking it to ASI if the device is not Google Pixel
+Other issues that you may encounter can be found at [our FAQ](https://lawnchair.app/faq/#common-issues).
-### 🥞 Development 3 Release 2
+### 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.
-Build: BD3.2211
+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/).
-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
-* [Launcher3] Widget preview crash for no reason at all on compatible Android version
-
-#### 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
+And, as always, a huge thanks to all our code contributors for this cycle: @validcube, @Morty0Smith, @benjaminkitt, and @tgex0
diff --git a/OWNERS b/OWNERS
index 3f7a780edc..a66bf54b58 100644
--- a/OWNERS
+++ b/OWNERS
@@ -6,8 +6,11 @@
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
@@ -20,22 +23,19 @@ 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
-hwwang@google.com
+brianji@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,35 +45,11 @@ 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
-sukeshram@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, abegovic@google.com
+per-file FeatureFlags.java = sunnygoyal@google.com, winsonc@google.com, adamcohen@google.com, hyunyoungs@google.com, captaincole@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, abegovic@google.com
+per-file DeviceConfigWrapper.java = sunnygoyal@google.com, winsonc@google.com, adamcohen@google.com, hyunyoungs@google.com
# Predictive Back
-per-file LauncherBackAnimationController.java = shanh@google.com, gallmann@google.com
+per-file LauncherBackAnimationController.java = shanh@google.com, gallmann@google.com
\ No newline at end of file
diff --git a/PREUPLOAD.cfg b/PREUPLOAD.cfg
index 768ba652de..9051ca8562 100644
--- a/PREUPLOAD.cfg
+++ b/PREUPLOAD.cfg
@@ -1,10 +1,8 @@
[Builtin Hooks]
ktfmt = true
-bpfmt = true
[Builtin Hooks Options]
ktfmt = --kotlinlang-style
-bpfmt = -d
[Tool Paths]
ktfmt = ${REPO_ROOT}/external/ktfmt/ktfmt.sh
@@ -12,3 +10,4 @@ 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}
diff --git a/README.md b/README.md
index 1c651f2780..694336fea5 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# Lawnchair 16
+# Lawnchair 15
[](https://github.com/LawnchairLauncher/lawnchair/actions/workflows/ci.yml)
[](https://github.com/LawnchairLauncher/lawnchair/actions/workflows/release_update.yml)
@@ -9,31 +9,25 @@
[](https://github.com/LawnchairLauncher/lawnchair/releases)
[](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.
-
-
+
-
-
+
+
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 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.
+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.
## Features
-- **Material Expressive Theming:** Adapts to your wallpaper and system theme.
+- **Material You Theming:** Adapts to your wallpaper and system theme.
- **At a Glance Widget:** Displays information *at a glance* with support for [Smartspacer](https://github.com/KieronQuinn/Smartspacer).
-- **QuickSwitch Support:** Integrates with Android Recents on Android 10-15. (requires root)
+- **QuickSwitch Support:** Integrates with Android Recents on Android 10 and newer. (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!
@@ -44,26 +38,26 @@ This branch houses the codebase of Lawnchair 16, which is currently in developme
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
@@ -80,11 +74,21 @@ These builds offer the latest features and bug fixes at a cost of being slower a
### Verification
-Please visit [Lawnchair Verification](VERIFICATION.md) on way to verify Lawnchair.
+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
+```
## 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
diff --git a/SECURITY.md b/SECURITY.md
index 430d3a7682..9aa0b671f6 100644
--- a/SECURITY.md
+++ b/SECURITY.md
@@ -9,9 +9,8 @@
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: |
diff --git a/TELEGRAM_CHANGELOG.txt b/TELEGRAM_CHANGELOG.txt
index 104b91b32e..47db600976 100644
--- a/TELEGRAM_CHANGELOG.txt
+++ b/TELEGRAM_CHANGELOG.txt
@@ -1,197 +1,10 @@
-Lawnchair 16 pE Development 2 is here! Contributors are encouraged to target this branch instead of
-older (i.e., Lawnchair `15-dev`).
+*Lawnchair 15 Beta 1 is here!*
-### Development 2
+We're excited to release the first beta for Lawnchair 15, a foundational update based on Android 15.
-Originally going to launch D2 if comestic bug fixes have been resolved, but hit a
-stability milestone instead.
+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.
-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!)](https://www.google.com/teapot)
-launcher should now render icons better than D1 milestone, with auto-adaptive icons feature reimplemented.
+This release is packed with many other improvements, from a more powerful dock to dozens of UI refinements.
-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!
-
-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
+**Read the full announcement on our blog:**
+https://lawnchair.app/blog/lawnchair-15-beta-1
diff --git a/aconfig/launcher.aconfig b/aconfig/launcher.aconfig
index b083390b06..f1f9966f78 100644
--- a/aconfig/launcher.aconfig
+++ b/aconfig/launcher.aconfig
@@ -22,6 +22,13 @@ 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"
@@ -36,6 +43,13 @@ 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"
@@ -223,6 +237,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"
@@ -235,7 +256,7 @@ flag {
flag {
name: "enable_fallback_overview_in_window"
- namespace: "lse_desktop_experience"
+ namespace: "launcher"
description: "Enables fallback recents opening inside of a window instead of an activity."
bug: "292269949"
}
@@ -289,418 +310,9 @@ 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: "multiline_search_bar"
- namespace: "launcher"
- description: "Search bar can wrap to multi-line"
- bug: "341795751"
-}
-
-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: "navigate_to_child_preference"
- namespace: "launcher"
- description: "Settings screen supports navigating to child preference if the key is not on the screen"
- bug: "293390881"
-}
-
-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: "enable_desktop_task_alpha_animation"
- namespace: "launcher"
- description: "Enables the animation of the desktop task's background view"
- bug: "320307666"
- metadata {
- purpose: PURPOSE_BUGFIX
- }
-}
-
-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: "taskbar_overflow"
- namespace: "launcher"
- description: "Show recent apps in the taskbar overflow."
- bug: "368119679"
-}
-
-flag {
- name: "enable_active_gesture_proto_log"
- namespace: "launcher"
- description: "Enables tracking active gesture logs in ProtoLog"
- bug: "293182501"
-}
-
-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: "coordinate_workspace_scale"
- namespace: "launcher"
- description: "Ensure that the workspace and hotseat scale doesn't conflict and transitions smoothly between launching and closing apps"
- bug: "366403487"
- metadata {
- purpose: PURPOSE_BUGFIX
- }
-}
-
-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_pinning_app_with_context_menu"
- namespace: "launcher"
- description: "Add options to pin/unpin to taskbar to app context menus."
- bug: "375648361"
-}
-
-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: "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: "extendible_theme_manager"
- namespace: "launcher"
- description: "Enables custom theme manager in Launcher"
- bug: "381897614"
-}
-
-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
- }
-}
diff --git a/androidx-lib/build.gradle b/androidx-lib/build.gradle
index 39d8e88618..ec0c42af04 100644
--- a/androidx-lib/build.gradle
+++ b/androidx-lib/build.gradle
@@ -12,5 +12,5 @@ android {
}
}
-addFrameworkJar('framework-16.jar')
+addFrameworkJar('framework-15.jar')
compileOnlyCommonJars()
diff --git a/baseline-profile/build.gradle b/baseline-profile/build.gradle
index 412c9afb6d..292b9057dd 100644
--- a/baseline-profile/build.gradle
+++ b/baseline-profile/build.gradle
@@ -20,17 +20,11 @@ android {
lawn { dimension = "app" }
withQuickstep { dimension = "recents" }
github { dimension = "channel" }
- nightly { dimension = "channel" }
play { dimension = "channel" }
}
- testOptions.managedDevices.localDevices {
- create("pixel7Api36") {
- device = "Pixel 7"
- apiLevel = 36
- systemImageSource = "google"
- }
- create("pixel6Api33") {
+ testOptions.managedDevices.devices {
+ pixel6Api33(ManagedVirtualDevice) {
device = "Pixel 6"
apiLevel = 33
systemImageSource = "google"
@@ -41,7 +35,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", "pixel7Api36"]
+ managedDevices += "pixel6Api33"
useConnectedDevices = false
}
diff --git a/baseline-profile/src/main/java/app/lawnchair/baseline/BaselineProfileGenerator.kt b/baseline-profile/src/main/java/app/lawnchair/baseline/BaselineProfileGenerator.kt
index c4fdc13af7..a55a86c1bd 100644
--- a/baseline-profile/src/main/java/app/lawnchair/baseline/BaselineProfileGenerator.kt
+++ b/baseline-profile/src/main/java/app/lawnchair/baseline/BaselineProfileGenerator.kt
@@ -1,7 +1,5 @@
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
@@ -35,11 +33,9 @@ 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
diff --git a/build.gradle b/build.gradle
index 9b7ac4da96..59550abcfe 100644
--- a/build.gradle
+++ b/build.gradle
@@ -20,6 +20,7 @@ plugins {
alias(libs.plugins.diffplug.spotless)
}
+
allprojects {
plugins.withType(AndroidBasePlugin).configureEach {
android {
@@ -31,7 +32,7 @@ allprojects {
}
defaultConfig {
minSdk 26
- targetSdk 36
+ targetSdk 35
vectorDrawables.useSupportLibrary = true
}
lint {
@@ -45,7 +46,6 @@ allprojects {
}
dependencies {
implementation libs.androidx.core.ktx
- implementation libs.androidx.core.animation
}
}
@@ -119,9 +119,9 @@ allprojects {
compileOnlyCommonJars = {
dependencies {
- 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 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 projects.compatLib
compileOnly projects.compatLib.compatLibVQ
@@ -130,7 +130,6 @@ allprojects {
compileOnly projects.compatLib.compatLibVT
compileOnly projects.compatLib.compatLibVU
compileOnly projects.compatLib.compatLibVV
- compileOnly projects.compatLib.compatLibVBaklava
}
}
}
@@ -145,22 +144,20 @@ 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 = "16"
-final def releaseName = "Development 3 Release 2"
+final def version = "15"
+final def releaseName = "Beta 1"
final def versionDisplayName = "${version}.${isReleaseBuild ? releaseName : devReleaseName}"
final def majorVersion = versionDisplayName.split("\\.")[0]
final def quickstepMinSdk = "29"
-final def quickstepMaxSdk = "36"
+final def quickstepMaxSdk = "35"
android {
namespace "com.android.launcher3"
defaultConfig {
- /*
- * Lawnchair Launcher 16.0 Development 3 Release 2
- * see CONTRIBUTING.md#versioning-scheme
- */
- versionCode 16_00_01_03_02
+ // Lawnchair Launcher 15.0 Beta 1
+ // See CONTRIBUTING.md#versioning-scheme
+ versionCode 15_00_02_01
versionName "${versionDisplayName}"
buildConfigField "String", "VERSION_DISPLAY_NAME", "\"${versionDisplayName}\""
buildConfigField "String", "MAJOR_VERSION", "\"${majorVersion}\""
@@ -248,18 +245,12 @@ 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"
}
}
@@ -352,7 +343,7 @@ android {
withQuickstep {
res.srcDirs = ['quickstep/res', 'quickstep/recents_ui_overrides/res']
- java.srcDirs = ['quickstep/src', 'quickstep/dagger', 'quickstep/recents_ui_overrides/src', 'quickstep/src_protolog']
+ java.srcDirs = ['quickstep/src', 'quickstep/recents_ui_overrides/src']
manifest.srcFile "quickstep/AndroidManifest.xml"
}
}
@@ -365,14 +356,12 @@ composeCompiler {
reportsDestination = layout.buildDirectory.dir("compose_build_reports")
}
-addFrameworkJar('framework-16.jar')
+addFrameworkJar('framework-15.jar')
dependencies {
implementation projects.iconloaderlib
implementation projects.searchuilib
implementation projects.animationlib
- implementation projects.msdllib
- implementation projects.contextualeducationlib
// Recents lib dependency
withQuickstepCompileOnly projects.hiddenApi
@@ -384,7 +373,6 @@ dependencies {
withQuickstepCompileOnly projects.plugin
withQuickstepImplementation projects.plugincore
withQuickstepCompileOnly projects.common
- withQuickstepCompileOnly projects.utils
// QuickSwitch Compat
withQuickstepImplementation projects.compatLib
@@ -394,15 +382,13 @@ dependencies {
withQuickstepImplementation projects.compatLib.compatLibVT
withQuickstepImplementation projects.compatLib.compatLibVU
withQuickstepImplementation projects.compatLib.compatLibVV
- withQuickstepImplementation projects.compatLib.compatLibVBaklava
withQuickstepImplementation projects.wmshell
withQuickstepImplementation projects.flags
implementation libs.androidx.dynamicanimation
- 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
+ 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')
coreLibraryDesugaring libs.android.desugarJdkLibs
@@ -412,21 +398,14 @@ 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
@@ -458,6 +437,9 @@ dependencies {
implementation libs.libsu.service
+ // Persian Date
+ implementation libs.persian.date
+
implementation libs.airbnb.lottie
// Compose drag and drop library
@@ -471,17 +453,10 @@ dependencies {
implementation libs.hoko.blur
implementation libs.androidx.window
-
- ksp libs.dagger.compiler
- implementation libs.dagger.hilt.android
- ksp libs.dagger.hilt.compiler
-
- debugImplementation libs.leakcanary.android
}
ksp {
arg("room.schemaLocation", "$projectDir/schemas")
- arg("dagger.hilt.disableModulesHaveInstallInCheck", "true")
}
diff --git a/compatLib/README.md b/compatLib/README.md
index 82a31bfe9a..2698ccba01 100644
--- a/compatLib/README.md
+++ b/compatLib/README.md
@@ -1,24 +1,15 @@
# Lawnchair Quickstep Compat Library
-The `compatLib` library helps integrate Lawnchair with Recents
-(also known as QuickSwitch, Quickstep, or sometimes, Lawnstep)
-while ensuring backward-compatibility with older Android versions.
+The `compatLib` library helps integrate Lawnchair with QuickSwitch 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.
-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.
+| Library | Android version |
+|-------------|-----------------|
+| compatLibVQ | 10 |
+| compatLibVR | 11 |
+| compatLibVS | 12 |
+| compatLibVT | 13 |
+| compatLibVU | 14 |
+| compatLibVV | 15 |
diff --git a/compatLib/build.gradle b/compatLib/build.gradle
index 5c3b5a0e13..7813d645c4 100644
--- a/compatLib/build.gradle
+++ b/compatLib/build.gradle
@@ -3,7 +3,6 @@ plugins {
}
android {
- buildToolsVersion "36.1.0"
namespace "app.lawnchair.compatlib"
buildFeatures {
diff --git a/docs/assets/README.md b/docs/assets/README.md
index 30e6cb7568..51ef527d05 100644
--- a/docs/assets/README.md
+++ b/docs/assets/README.md
@@ -1,19 +1,21 @@
-# Lawnchair Assets Guidelines
+# Lawnchair Visual 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.
+typography. Visit the [Material 3 theme builder][material-theme-builder] for more information.
-Visit the [Material 3 theme builder][material-theme-builder] for more information on color.
+When creating device mockups for Lawnchair, make sure that you're using the latest commits of
+Lawnchair or use Lawnchair Nightly as base.
-## Device mockup
+## Device Mockup
-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.
+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
[material-theme-builder]: https://material-foundation.github.io/material-theme-builder/?primary=%2347B84F&bodyFont=Inter&displayFont=Inter&colorMatch=false
diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/device-frame.jpg b/fastlane/metadata/android/en-US/images/phoneScreenshots/device-frame.jpg
index e67c6542414d740ec720a3050d5481936d0c381f..70a926b3c8d7bf4766ff6ef5a07d9ff865d9f1bc 100644
GIT binary patch
literal 35920
zcmb4qWmH>H({6ANuEE`lI}~?!w;-WFa4V(7JpqDiad!_CcP&;N3c;lmX`$ZR_x;v)
z*Zq6v{G4-Uo|&`vI{TTK^LO*_0f0nXT}vH+h6Vtj{ks5vcK|8?d>kBH9Bh1CTwDTt
zd;%a136O{g$UsR&O2fv)!OqIW%EHMf`HYiCjE99)NJ&^sT2?_pfkRMLOGQpoQeHv!
zKSt2-2?&5hKzb4qdRcB(ZrT5D`8y0C#YI0uv&TSV1)!6nVUVKz9S6|=!-<9VAGrT3
zm}ux2Sl9p@+<#hq5+oIwm?6E)EtJHa0rOzmU)|FiEkmHjizsM(C2D@4W2Ru0)!0}!`&5-MsY;ApBC4wv?S_UO<682_C8Ki>X117Kod
z|I=}k0?_|Q{_ibl=%g4dWWtzA=+~_06qL}>NnIRWPY?hw
zH@ze!R?Y%Y+S6c~cOM?4Q~kV%+3eO(7#Wc(zaVVM%@zVrk$R@__q`nXh;ZBs_wi$aBW`O`kP{Zof*
z^g2{eT|eiDngxe>?D+PkJW5EIk(rt!Nc+j@yist(WW?lI<%e
zn8SlP$Cpx%J0-
zs`7v>E
z!RKb7&pQ8t&yDa)cxfY_aNM>Ct?OnNn0_uQ@y7OWFz3C~cg}wL(d}@vwlt&f{5H+_
z@UqfL1FG`8D?Yc6SHHMcD}KM$85|mokolLMXL9qI67@yeJM!fJRsHk!`G2E*Kc@-E
zD6<1W3DQgb<#Dcd|7R_HZt)$``%gB|$s-l*z4lXm{^8a5_ZIl2V3aED6DFXdQ2YI_
z(T?pU5_`k2m2S4#<>mxvVKDFxcdbcCoudX4ech?OBtQMB-r`TFKWlo0R$WMOtThe$F60Ued|vV
zD#(>oLF})(#?ZeJ;nOHpVYhqJQj`1aZL%YCcjoIGKR49U~Fu`DhU
z^EfS8jWDrkjtx$@?3b`80W><0md6xWY_0%{Z4$r;}Z%eJQ1Kdu5bjo{r*1RI!`acI#t
zVgzHja?&f+w#kuHF-u5dMw5%x$NTAv!2pnhjAcZ0#dwpOUiZjHaaTW2n9^o*aDh8v
z1-E?kKu&8PYVO>iN%s_?w&vnfJ#A^4$dR_4kZDe0RQcGbc2inHzrayp<5j}nXk}gu
z3ea3iPl1wO#GPSG*j`1DgFt(10Me-Ox;;I%!u+Py$icd0;|wrof&FZ-2BI9hwRe-?
z!MI!YMMSdW{?w-%(>^D>NDmy#T>bm8Fq674Z%
zAxbZaY4t+WvKp11w7EGFu`9j_?XK}J;b~rMp%c;C5K>1|AjxVZg^tjab0!Nan;o00g?1UCR+^6)5SCq
zV+FX}Xr$3yrMm>Xj4!szn!Am0Pw`o0q$&d(*aS~M1)6?)WGYN>0S4%(Ob4hTA>_D&
z{V@~P3ZSXn_}TK8ct?ID(+8`g7htg&6@K^TIF=@?@%V39B__JS_U?0O$SK{sOqAh@
zs#V=Vefista-r0L98nZ$TUBdtQRpo$Mu`TsR4(~=9k`~C*(6eSmDdhfhR^5>T0p-i6=DD~vM!j!wx!@lQ
z`Y{MC`hAP*q?jmnvGde1-b)!|+#h-{Xka!dNapo`}&b7tWJ5phgURN((d8-C4
zDZSi_&NvqwMX%ONWE?IHMzYTqy{RDWE+`)&p5zgxT0uJ@oyc!VCHGqQUHj+Pi6UN<
z8FmsAf?Y^#z3VLXniPJx+2u{eWEA^hNtq*Og<467ov`l`*n@$D^vQ8nP5P!1lT4h1
zy&?pT)j_5VEl)poAC*bS6jH8~q?zOSnTAaOsqHuk1UWbHD&bC~ZyreWcN>AV&YFWZ
zS0kRK6T-aDD{PJFtn>5fr5c<(tpmMWTQ~+W8)H)Lg-_y|Li@F-dT*4Hq;BSR*($uo
zeUpT>8|@2;qcXn&<~PXBT!#Rm+;=5urcR_Prdwr=<+bc;X8PCjexR6fMpOz6o_W4-
z*u?(ZOM?0@VAecTkI881oafGF0-Gg8X>E!#wiEJ{a?P*U2dJEngsXS8Q}s8<$_gf|
zM+s~G$UTO=pS>z-;@s!k@N76ojo(?*6}(ffFOWKM9J5LQHZ!BmS}QFPU=$|aS=BYP
zd68qD-wyAeJJ-i9h?YBYhIOP{A9;HLsMH|B+7k0cM1oxlQ8Jk$Uafx;mQdn^RaF-Z
zgzdd#G_=f{w!1qz{Eyr(7*b4S>a(*l^YIYaqTJx#NU2c1ORC>$%T`x=Ta6PwSkEQK
z<(^)C!C0?+RQ_=NUOuW_8pbkG8L2)F7^&P7TL5>nb4n%HWtk>X7edhAM-2c
zlt_Q(7@<|Jus$0MTpS#4%&H7f+)cC2WoGg9j_+shVMtWWPW5Her_X`*0jt~9(4
zI^Tz~8C{uf?ndNH<8HKjHNdVf?<&_CuB*eNc3c;{zw*%R?&BNoTvMwoU-YP`K#MHt
zMvq!eMEL4lz&02U-ma3Y`r)NA8tC^^UdJs^3#yD-L!lha4IpF-+f&Yu?pyUs@Oxd#
z5uxpIEWXLQr1TjWBp`0!Vw6>ytVm2JsBt%MbPn1Zt=0hwt)m99I3DZ8t6uQYEZwi)
zT!A26x~Z;okd9E57-4LTr?{MEi5=IulI#0l7YYz{b?eMv$W7}Rp
z5ng*=Ip+!Im~uTI8?Bwwh}~K`I0P-oOjKrm*cZQde{q+rnnM;12B%ll&shK?_ea#?
z7Wq9so{2q%FC)a<2kp%E^Ops59G5l1Xzq8c#vH8oif6|=_svB;rO2T&O>Mi?8V>MJ
zLiFy}$!~|{4_(Vy=S)(6XPA6bU~#GNoh6%pi|CHAYA>Nf)>gZki7h5uE^I%7NDRG0
zoJX%}B%=NTVk|jS3bT4MVGZ_?0ngSqP`K@c;suHUA*efgJ3karpg?I+SS1?Pv3#c=gL=er~^C2E_1sUh5fFSFnyd
zq>UISPcCSWAq6!*QFpuP2wPTB(wz0(us#_*SzOKMQ>cV%i0y)yUJ}u1Er-W_Ndt{A
zzoLP%2*?@B%I3{k7Fz#+Ys>sH9-^wHl!`O$5+(IokvRscAkd{_3m_XIcWNrR+yhBB
zCcyzSo!z$mRhB3EjJ_9lJa*(enLKQw1qv6z$02sX)M-aF^0Ia3o(_bnr$nvHjLtt9
zZ|ipqK&M{s!_fMHxbwNxbTMssAU6K&Rp#^={&*{T`zJEnGY~@mxcs!CuE~qF+Fg^`
z5iay8Z@HCmjsC09>Kn-2n?t&+*;m>n#!8%`zjh64l%*CLN=tWc_w;CH`2%@5r&rKC
zqdsHtXSS2LWDH|wsa1a=+XGf#9PAj@a!$JXbqWyCd(w4YAP4xj--~c(l_RiPIX}>
zGNkMXYMx%O{P;nk8M#8OLG4;(K$eionQFZQqNn>+sg!l9v6}wvI+({f(PKZ+OJFd1
zztUaQWx6Di(+S)d(ih8i<;>C;(Ji64C1zKi9zvcg*e;SrjHq;%&j~n9@d&2XQnSHC
z>Z94vGsJa!2uSQ+Hq_MQ6zC!(rlJlEjSb4!5F+PZg2L}XQ+vLA-sDjbE>B47FnR4k
zH-#u(ZH4di;0YC(6?f`l22Qf4&6|Xb?=4WC6$T36k?VBWvZ{Y!2lrrtDa)WcT6JPV
z@held&y2@+GG*l@WzF$^Y+}s2ls-B}Ct{07NYXk@7tHxc@Z88`O(pMAKa%A()!9~*!rQ5T
zWJUeKav
zH4o2^kuCOU;zp048!304mmnYmmKrCE7GZPp;uRx^nafvcBMAOO=|T_$Km1f$S)9$T
z&FJD*7U=+<-*cFrp*{9b({Q0Ce3KD%e!WmrpHU7+yi8Jb5n0dppzPC-D8nGO;ra%?
zYUISgTbX0aT2iW|Lte7k%=1=wX`mFkf9Mp*NNHt|&<^1oLp9bE{W~q?^pZdcY{hZ*
ztH$qC5=~8{JC|3-G)L%3S`l|
z%nihGGow_F;trqi8BXvswS*D2s|F4i^r~p}5pr**tc!rW7ok`>iSxTUWDVohaZQMj
zGv*g)-1DMzt^(w@Kl-?@YIpy%sy|UtDXjO~ic^DPo6Y>pbw1J{Vgl@RU|~v&ZG+
zw_SjWfS>5m=t;Z;Qc32nMt`uj$?0uowOJSNLYUnxD1>9&x}SD0wYZE8V^o^Q5bBFo
z@>yo-$ZTW425I<%Q5W3%hClVHn0+zgiC05Rb4MJ;Cm>s~_F~^jS=nWkL2TSE`~^}AODtOi_lR2V8>aHMjdMrmPE9-+j7E3u6URyO
zkz@RQUO_O|TGi|iwz=G^w)w;?RX-AM&uj|u&cA?gAqCvtEAB7yjyUfqrKKZC3k$wz
zP76x3wlg9p=`7I7xVSYY`(cGY*&E$@h`g^1glNQ9RSQRQ;lI!&|U46olro&0A)syHWh;du&qaE7^YN
zQKL~fF=;w-@*)*DBR3m9o1jpFw;cLK{k$WAQM<36v8if(*|sZIUDlcrzkxElY?O4&
zxX-UAFz6uDzmizRgrAZ$zGNn}Uw@}XPqu}>hHcjQ7kGa_Yv(Ox7-N<(`ee|^rN;d$
z<*BxA08E3jZ6fZrK5gudfP2zwD}$HSfPrDOIvK1m8fhCOvt^Tz`-)1JtiyzK
zV|R_q!AC<-Gy3DIQhU;rGjMM^5EDY-?VW+q(Za|u1Mf{g2OO4Dd6E#+^rF$;>O;%N
z9T46+g_N@U`cXB1ro$<{msLQGMs0FZ%$DMJs-mJ=`1cxtAL0S|f{Ywk%c;%3@dHC7
z%qfQbj?0gamZwh-JKajA)KMGgxH55-!xxxF5*m`mf`+Rm-3{dZiqktdAzKi~6#ig<
zSL)dd*s*&r$0G)RSdo@&<35khnyDM)dgu$Eg{(+)C@;TN{-GeXwBFJbZ+eM@dbP3r
z%rjr)QD@G&oqMB4-*YkV(hf^e91;|Em386s&OPP1gKT*-opR1mrJCdwp*uRtiEPs}
z>bV%W`qV%_)$L{_yXIVEt`znn)p4jG(d?CPaGB~ci-&MOU-$F!oOM@(_FT!=<$keX
z*`A=7?beV?Ut%mwpTB_bxYog32Q{_VTf51OB?>*1PCwgH$A4xH56UzM6rFZPdVf-0
z5O@oo&|&U>09kKip#|6)fc#N;MOqaR`P&@-4vsnyTp4bwjO!1TDd&PEbd!5X6`v6>
zaV;b#fB2KLMxA?2j0TB>H8%0yK+(t(?@c3B-%((g3170U_O3$9zp|9W@4}~>&lWCS
zqo{F47NfP5LIipyu%KRArn+-bLGtHdr@xZUy@tB2C+ivG*ok8s^Jc8%{zgH20GM<)
zC38Xfv_pRy{Z|&MHkMt9e~ax}3^}y`SwqB!Xn49M&Oh}u1y?1Uws7-2Xsu_I?o3!=
z?^at$1rq;$Mpf?kr?H{BF0CnQ*qsihezgKWF_)1*4wFWhA>O$!FuqMGKGpw??p$z~
z`G+adDjulfT08z{;qC1&AaSP!}y+A#b}=eY%#87n6$8}ccKVxLKD_Ozd5ce@4ne>C5^FS+E(D86
z>{D&3boUVHi~$l&sfbKZ#u;t=&h`KoGh*-OS`m2xRzIQ*M6-upH&G*)rMy}Zq`-Te
zLf}UrY5J$V-r|O!(*S1E{zn99nUT7VTl@9SP*Gf6eM#@Sj?;mSJ<)!;f(MMjwypue
znNR|S_ctwA85_I$g;D$M-rpEzYA|YXbPG^&r$%`e&zzdIQo9vVnBEc|_;L4)uS+BC
z$_^Lw7kS=iwhy+bWZfwh1P@e7*^)X_#+hKYJHTf-J8b-w$7n6oEyzaqR9{ZoEx&HM
zGdnU0>dBFKC!Gf9JXb=sQ+EDQvHlj~_DOys82pw)_v^1$A6aWQr|q5d5k%WpO)!2~
z4(B_s1N9L1ye~;rcUi*kK!8(ydjbql6KIh
zQU?>Ht$RkG@J&~ePnQr{UcYAw2`RB7e;eJF`lS#TLu+Rj}bwS{!J-3&)tyj`RHozkW;(D$im<|3Ob<@%v-$Ta2Lmn
z_)jv?c{j_?1}}clsx=Ay@Jfx56!8vB%kGDb!qH!4kq)fd6X?BX__~FuKg1e5_!u++
zKj*Q8^jE!zfcd!Eu!gP11Fmq+N}kikP)6&WeY1`majBEv2|i
zUlgoF;^8uzoUJk%@hQ1do7@C*#Q}X?V;VZx`=Xy
zJ~Wp6_Q5Hjz@{bnmtFsd-riLE6%3=fj9T
zjAJ2;tm%X-Kd@Tnw@Yx(_yS(!>k%Bc5zX#n-hJguw$?#Mi7|e~n?G8}&}f(98N*s^
zKD#$>Ri~TtlRppcB*ImlRLReRQlu&P`*VQ#18@LJ`hJ{B0j)^QVcbC{zx{#@98+zd
zt~lg*lyI5{j(F#3IrB#$I^qvhr~MpXS`TLkl?0bO_C_#RnU}5#d4Y)4ow_2Rm%`U-
zQlIk1$=YHgO%&>p)c#(>~gKAu0hmsj}{6+ISRL9_aVb5QT2CaCRyc2I4xl*dqV>dy@E^
zayoINohWmg$5E|Z1~BymC+~yURB*8b9lt>2;>re*c&p};j*`h5d|AuDtu>cXmS5&2
z--|j1{V5%q4uURvH05@sriIUC)~u6ynCZO)QsGoDtwScC#8RjVLmSk#w>FYrWh>0#
z8*g3&K*H6hJ?w1*kslO5-$7xg%4@otmiD1x6$O@$xa!B#o(>sJ^dapzEIIitvKe{x
z?rYMY1^wo=)-SiUl#*c3$f)b~ei&P~<*u%CSametC74-zDP`PBR}~E
zV%XoDWh?meY>791K=3-v?0t?-pyWAS6sqxGM$Nw=$5Ke85^sRrMf}Yb2dci=K8iWdiu1B
z@S1DIjoRAU4Hg0#YQVHCL_s@?>lU%j`R7MdxIK2Me$-1Z8Xe~k=JpqSD8vaf#?NT!
z_=DN)XNT8@PcPVT@6_KYO@A~E&SBfxuL!o+4D&olEy@kM*%Ha=T3sKb^|aoQ!wgl8?Q6++kciGu?dqs4F-=
z3wujpm*euaUXV+;6!}4)WViqAdS(rf!0=K)pmdno(;5%z9N1mIXQZObmQEE@cQj((
zaQOK0&BJAt!>|I&?@^zzJ1hJ~t@Idr^YEYD1ZJs{5~Rk`9SMn+ldF?^jdCWl!q6=r
zR^b4BMHp=5-JlLazlxk*z-h
z#Trq@yAH2sX*&oC0rFZX+YRi!k+8EU72BWBd$Zb3Uq!}jxpf<99@ZTrxDXBljS_ci
zggHrPVKNA>=vkuO-z{78%g&;?a@%5Fs}p$q@fy-o>M+1TqO=2J{4ap|ZaT5Ni6T$cCG~yKm~!K@E8Dlsfmuu9k-b-?
zAE@=>q`L3>xl!0xHAY((k~DmdPA%D6Y#t%L)W-A*9RfR)?=&rpCg_O>lgcX6#QD_L
z{uopge-~d7eQW;V4!+OM!{gzW+)Z}6(=Ge0VR-%+hRhOuZzgK@i$ijHKi*!qs{HFs
zCm4w(QM$SPGfTBylGB|5SEa4VS1@Q;2HKmub)sZGy`}2{@$DVlJ5O|eWu%D*NEb&H
zZ^WlIVdzDlKTJ=#cg<|M?GR+W1v@t6X|9WJP&0N_qB4To>Vpke|gg
zNEe1P{LIpO;$YieW+r+b{zZ@3*OnNqO`oXGFi^PZw32Y}s-48gl^I$*CxJbDhxWo-
zqPMS+$hP_87{5R~?Y5Mu*T^^-2&%!gY-B;-XejY$jtS94Ee(?E?
zfK@$}QH@)HWH-e6up@5th*q$xWt{h#wW(TE_h{RrmwvQ!p=x9U8K7k%S2r=Lhmnhf
zA6KStuQ;@S`kAcJnQ|xhy>?5&82q}eUs*b&bi|y0N=_kSOmkUvM&x^qN?(vFG+s!G
zyzI2pv#Hd|%cYZI#;0ng&7|vz?wUk^OBjus^cm|fQY!7FF@2leP46JB724-p74DMP
zOK0$V$%$&>fzt(9?|cfv6y<8>`PFB6`-c-Fu6Svrr|s`B1pI_tg1w|Jof
zLW1CU>1f$gk@`*o)ToFHt#(5YJ?GAKR7SMM_McAE?*%KsDO1AxAit=#j4h1>rXQcx
z*__SCT#-b8LV);J9%isz13bpDB0O^GMG?@bR&z$D378Fw*z?ETpRvYp^iGmw-~Ulb
z21j29@f;^A(7exQ7#J8~3(`v5Gj;gcD~*aloj|2q>vdYe=2-y4j)
z%>71?bP@ml+iMorhY|v#q~C?|L;t$wy3xRmTRnxb6TX5!Ndz4|cIoitlgdx+Swqh#
zK@-!yw>)IhsM=6!6Y+QOy40>NgMfm`y>Wmfmue$$KOw3HbH)u$b(%3!foQIsXw-3H
z`kiR@IeVpFbl=v1td3sq(V9^am#j7@>U3_F*x<-TO!wILz6v@mk-Je&)
zGe&uMPT`?Y3U@>NMPBt1DHj_FWw(I}!!VM3VaVpyg3D2D3HeVX{r=T?W9^-VT;f^R
z;^Oz(IdVIC#GP$$w~c{lvHFs&rso>gkIo)va@!{wT-GTOFjG}?6@`*|dZ79rUuxFr
zcv*I+%>Fi~iLv%0PJcUa_{NAMT0kJMS&RMw(Z_oVw@4xP+R5mP%X5`xrb?GhZVy27
zli;DF+ldZ3=#e}xpJT5>m&Hr$;fDqofG!)ZAnY~N0nmLQh!5pmdt5}|z>tW^Fk&su
zp668J7yRfhborh=w?6&Pjmi*f^NyfJ2&488=?DY!du{b6ey-j4n);l)>ibR
z2wAGGvWkFQHS%&Mzma{}vUl|h0Vyd;%mjXV$rW<37>>Z>Cgoa%*DPP0MZi&yK;BtALlcC$>_SnDrQ9h#jH%1uQj*FZ_u2
z)HFm=MATUB(G`E9!?Atj
z8G&Hf@LGTWY`We98Te%e(=EsS$R+Sje>SlYp@;Rr?A?udBpPxxSDa@ue=Y||R!*Ynhodq;CvT;pgAuwL=@yRz2j{WegN7PB@qY-@16
z^^_W?^b#
zLy=W>Ma!AT$)s{kbeacpCQNJ}&wBgEEBywGa>eX|jOAr?oJsxaJ-p+lFjZ&+k0|4(
z{c&Unsv&`naLshtr7xJ$@uK~~YE*zS!9{*}x^kJW|%zijE&b3#L1d
z%VC{^1J@{wBp|2w$^NR;-RnH7TM$V{>3>bw;<+O68#`BUgW80=)oZ5wW5fbQo?=N4
zDHsne^7M5PiI_zYf8$4^8u8{)-&4btl(hYKc4r5@_u`oEMW>7Wcp_RqbsjD#33+xvtj(gwJF^_%I{~2A8-P6m+tAQho`T_f`RhsY)bkX!Plghz`A2G%^P^Co$
zd*jz@G*IG8PvMox%+ICa5ilZ7(O``azFAU#G%}l@RFn3CVKPB9H(XfWMV}#1|EfBx
zVu7D11O4*&z=A>J(4_|)H9zCq$4kA5FE^%}F?QquVugE_GEVZcE>2vH)SQ=}Jw$6*
zPqRi!4#Xs{FZuK7k!*tODaDzL_8Tdr)ydK~Eqg6@IUzA5>Uil`5gWJT1FjL3x3lTwooqXotLg9oRrLsvPa$$cKn4qPy{iEoXJ
z$XGJNSHsoR_IDV+*o-3^CW>xt^a-qA-|g|HWN@R3wtzfRugW<~<|IG!4$j(E7CzY8
zIQjQgRB2RElp|C%+Mi9>IDLq(7Nv;4mjsW;89oG5&(NF+k1Y6k#*Yhd-z$}fORb76
zBk!g+h`fyTp4$j}qMe3+c+He(ro|U?(vRV#7T==}N49Gpk}I|y)yZEKAJw>1w2E1e
z&q+7?f#5RGF0P>H94iJR((oCN(AD^>mmvmNnwNJh6A}bT5&vDi*?tUHW=ZJRGQN`k
zW~mTi%-idyIT4xn|ClVXSFD(WDkqDAwS~lwcROoEXT{kOF4Z0}pjv1Sy*5O{*=fqZ
z)r{R6X)+bR_|t86WZ$UuuuUv=g_?X$v4MxJKFoO_S~%9%__)^`2TvL=>FN3C4YyoX
zvjB6nB$ie?{aPOu*4hJ3Pt;=rrw;wy9{i48nM!kPa=VPcfqZP!>j36YkUTwv7**7G
z3Co}^yzM)`%$N20Ghft8p^84j=FO^)>Q=wB^0)1j3SlrbQ(H)3rpEDasgN|wtAtk9
zCquRw-YSm@;;GQzn2sfIEasbdlWp1jHW9b^aiN(a@d?8)H3hrE5p5yheVA#ObMoBG
z6qDl~ZI$S{RL;IcaN3CH<6${5R&)W?9KGHwD##~9-0`RFrXYXE37?$Lvu87i>0MbF
zN>b)s23&)HM4a5{xRdST;^DfYI~uj^gAkuflK1W|^6`_G&i1F|5y6H<>(nxSce>VG
z>IXVSfh_+zym2!q!DQH&Fgu1PEQ<_#^D$U9I{CUWoMvkCSoZcg7N6~g8|LL6Nejy&
zyUf%8m)!^LjUmOGxwJRvC5;tvUql9wD6T|qeBM><2a1C6qrU*2)5c41Kue3O$=ZZx
z_mub-s=YvPbzQNgRPUW@YT3lLEjYR&rM+$N-MVPsC;`|ekwlm5G$GviQpJ;?UpC}T(Ks3N0*!eImXrfJ@7FuCyO>e
zFYL%~;YAx$$LX)vVe{4uVs#t>92h1GBvoR6~BW>w|s)UqDWHsx_0pLQ50MGsCaDKJ;3u*e>w@c3qM}6u(n-EIi(a_sQB>AKN
zjD4IwcgVV2{X}5HuxOu;J8DC_KxJXGW`Wz@H%lX)Pj?nqeu4vGTd@uSvlxxkB5
zx6;arPwhP>KTO14Vi%E`U#$~=(jk3;~p%ZcXv8W_m;NQe>u*U!@U3e|nV%
zG>f9u9+cLWoJ2Cj*BP@{cxB(GU;QML(Xa`3KqRBH2b2V3k7%PLewzrF6l46W@+h$>
zbE;oNB*#Vuo=s59s>Mi;6G)Ls$BmiWTISR-j_%<~7|F+iV8mh<#kjCDzU1mj79v)2
zB6=_H1=}G9DbIQ4D;5!xft+48mHh^|>0%?<5xbGlsZXf(ur3TkC5ULwuADPxJh$Jm
zpD|6_+T4!rGkb!9rxcn~gsth?2cKft)scrEUCxDT5$1w1-iBySGUtge>psC-Ruudh
zD=$w(oa%Xp@D|a`M%TxK&Iwm=zl)~<&MWiAn|Q7*1A;nql=^1i+4q06g3-I~QNWy2
zam=0TKP-b$r>iSk^m^amCT<~r!|XD@AWd~`EFqB<4pk_O-}#_&9yy({N9e2HRm%X(H~sr4S+x$J-)!A
zhliYmiu{dd`}Xm*X~rBGnyB?X;|j5VI+Z30BYtpgI}dJnSf*D)m=zrNo-FO&M9;F>
z%_7B?bcQ=)5e*IrT1-iN+x%l|QyBU&n|)QD1rH7UP?a
zNT-=LVRsXB~?^|KOYyex2^Vw
zK5dFYEzHa&3^u(hGrwsNQ_vgD$i-X1_9Bp>tT|0-G}b4AaW0%1G8QmK3)<%oJ2ZQlCi$l0)uG#;O1
zPKP-yk1W7bn7rSq^Sl_ms*PoZ3kmLc=j4l>^D!`mB_s-?ka7lM9q2as73Q^bUPpx|
zEZNxaJ-dAu~-T*lV=qO0ti
zv38r#YYA;5zB`}|ygPIW&s*8~_|hdrqK5SduHGFw7AGvkI&Ut^2?L-t8y{Jd=C{q
zBZ3Z_r}t0kaW~yg!`$U82f6e$1=%Cj2W9Qj&HeBqis`DdMUD>Kedua~=9WAR&c8zL
z81f?NeVP;|Nhn#-X;h=*?(H7FsPemk^+4B3>v4x5f=vRw87h!qpovhzNl)lzoqxiM
z8#!__oU-fw?G>yUJlhqftRJffzBTM5Ug|m2?ZECZHV=X8+^~0AI_Bd>{@Kj=ypC1w
zpY74u7ElqIcz(2(;S|@GTkq3;upCwe!sqX8kB~AItTFZ3J#-Asq`$zwbBv~lPvDi+
z5a?jg*TM5gRhmPm@S4e`!&c;$wqt;oN{1Lj7Kf~K4Pt8;f=5>w%I+~{w?d0OiJB1q
zOx@$3Pqej{zVl>w+vsZCFGe*7WLlgEpO;$*K$b
zXPI{oyv^xnVV1q|PQR(JgixGt-66s9I^2x6E)JxWLmYQ?lW
z&VV67al_U}eUlp0kLbv1W$^nW^fq+4l84iLX2r+R3$YiX7J*ZBQ#3MEKx&WMDhv2PypQL3t2|^
z2a(sm09Sdx_xLyMv0KKLteyXIMsNRyo=zHTN%?z`d*0rS1ja!#5BC@yL17wz8s9
zuClG(E=fmua!2)-dT~>YR}-}9d6|ZI6s&bw!*a4f8tr+A$^r7TJ6U0XZga9mB*1AX
znkOx+=Vq}AM~~xLzbFIS0_0DiMN>Xp`v|*D8q6_2W`Trro$WIrQc3a)SNx^+f`m}CHTiUS=5ATT9Q>-
zg9mYxyQ5-Z0?-q=+2W!S=Q^%Ojl65DDbaT2Co$Xf@W#YhI&mt)O@x+=FFqHUi;G8u
zSNN*EtPELI59ZYVFaA~w7iqQbwx?P*kM6?qM2WVqlxWn!HQt%58R0A#iUOlMg46s}
zzHIh9VnlM^*h-4EA1buT+sn-OzhNcRKDJ#a{p!y>Qdg)S9{J_j^~5gFSRkL`+vWL{dMQ*)nj)
z%#{YJI7~FXK5IO4K|Yg{&8iKd33st1YEC5+1FWZHW9ovjU^6E{qKYz>B&Azpl3pbe
z#WNexsrPKQDmG4`$l1L=)^0<(#
z$N0UO9kEPh970b_qTTXxY~cncNm>7)X&;S+pa=*0%(J@8RDc>-B)`aPKe>)SSkLNu
zMMEFplk1yL_^${t57?#9H75Hc5*@-8$P2Tj5ycD835dq+?ju3)bj}8{sRVIyu8)JW
zyZf7oBYMkZ=5+GB?gG2Y*24JkfE{rQEeqnuJsq#FYIQ!>P&{d~`%0@vZ|JBWX-Kbo
z!+VYsGMatcmf#%vjMy=OTk0^b(Tnv2cpgws@5zQ{^7Yv^#pxGmfF43y^39h_Prv2;Yp9#RZ$0Kq`tf76t=&B-!#C9@I4}uRm2`f
zZafKw9%X*sJdC2t^n?{%vrvI+04wKG+ZUCkl2>9_nKlzzY3
zmxn1r*Y}~GVVR!1M=&EC68ocly1J7qSILZfa9wJM7JZeu9EBPffWR=W@}B
zZcOjePeX*KdFPq%qzlaq`6a;y@0y6NpG6?tW;~One|=;_d_$43&tBKSr{nD2HZqfr
z^HB^w*KPULrR{L`7og;4(82YOOSeZ2V>Crtdj;L3U^aw@5Uy@hmkfrvKJ06rj08$;
z?G;i>TL!tYcut`qQ8)JZtqJ4-0sBRuAU^A2Q$y!0O6G7YUhz^d_2NVEwfWHA>&zLb
z(|782Tp9;i#nYCu@&cv@5fvSTRPld|ILXmd{>$nzK>?ADg|t^Q=h8z5C^=Sslz^
zg1Al-hcECHn`V5!Lk_Y)%BePztr}keQ{EoGUZgx$DBwN_58a*$5|=9_3jv`g6%xn$
z`lrHAKO!g&yNte>Vs~tUKlP8=-BVQlf#}DLL8dqL^$2(9Q@Au==oky$PLn2@SKAAC
zgE{;YumjVZwU8AGP`v%hrest$s=JQ0&gNn(N_C6LDEA@2Rt2gyv-PiO^?&$!%cwY>
zH)?S3;I1=R26uM|?(Q07a0{*>xclH5++Bx3f;$8Y4#C|6Bq6r*`@g$;_S1gpQ>Xis
zoUX3wNAA7lCsU$Irjej}`f6)em9Uwy==zITlYO3?%CE8^ECx>BpR~@bjt%rbDo7Yt
z3cj-%OWP2x!CJ0v;l(`4fFf?&Mr@X|%s%XUG7aycF0-^^3P2BFef{fhB?q3}VT-pf
zO1`dN8mr4p{Isj?k+-k!6~bPQgKZl}&y)4XbqB4|Nc##Ah&(tGzq+QRbXRyoTxaXb
z)BV{mW*a#cBa^S4J-Iy*%{de(c1V8LWrpP$l0$(Jc&8+o7agYCh7DgePi3Tm%qe(O
zW88dnPQJ5@ZfN{U>_=rHZG--cu8m)bpVc9eT{F&ES^lYY)E8~|FUX)@9aUhRo+rkP
zv~_O@UixONy^AvR_m)6OXX{rD5wy8X_?|hQjKC??Iza#n0~0gyp0os#c~P;3i3oiv
zB`nLm){GrwmV1wN?ql^F^bhdOr}8i94&5*G_B;H5w?Pa2*cG%^tDz%5qED}|Ykh+F
zNlR6c9be@-RThSg6Nz3C3CZdrNX3Eh>TRU5jzr|(NVOB>-vBr#OrK=WFKGU|bJZzv
zzR6zPonegLi5Pj&udH4M6j^^c9>Fm54)lk%;0okTqzm&0#F##4&1*n?hhkY5s>STn
z;juy`yWe#_aaGG$4{;-j&<);6gVmx=#J1SRHUGqPKfSi$#$kX3(CrQ0FF4VyJIWY5
zWo9!Oqi?l`-|1pO*G%SGC02@DID%!+JdrhVW^FoeF642Sg^Tv5^gAppZPvY=tM~_{
z1Ha|_NnZ3`Y^-ysh17onCZwb~;M~`+SzW)QQMDRWEalc=aL@@wE!V)WC7W=6dCmD=
zK6hJIGRvlp4i73|oD#B+weO4FG!fgeG2}kD^wD}F<~NdN>MvFZ2ExT`--7Mw
zCqu5iZ5xR*UDToK+x?l}ttrHK#2Yw>aKgb_JnVV>8O+gjvnC
z?HUg_-M1PM!5y)eZV4ni^J}_#@zb;A37@ESc7{B4IOx-q-Pg=rlaoh*ru#ZW>}4Sn
z4eS9fbgz&1hy*bdSjSUb*Ei46TTfFNSv;sBA|5XMB7z35Ijd^?*XH=!g(>2Ak?Bg;-A9qWT!|{(dN_oaG&7Rqr4T@w)f+Skim@Z7Kpz@
z4zS=t)lk{^Zoe`meo_AC*Q|lIfY%c7$z%-BrcF}^*GkeVSC$!vsuaZw(1H$wt@}$c
zRt8d&ox}$<@wQHQ>*(KvX>-jC-Z^ne#mkwg;-ihADX&m(B^XsXxkk>x
zY7Q|n{)r+N-nlj9qez@&=3wh_90hdj^4_MlhHbu7iHonx8ag5!Jl+f9s>o4{y+6frQW!*qxW4Pa@jBF7LGUZcEr3b+TB
zN#b}XnMG!Pzk>e!=yE2j(yPHG?yAqL;*cHg*}}4LZd|!z-sQI@FQf)@aVf357TbP;
zM^0m#Q=mE&O8J1lO5WR){HH4221C3qLZv;W(!^l3&mk<`;a$}k
zfD-b_E8v`LqC&u_P7SKpgv=EY|D}oPxWWAhcUdTVeO{Gqojk~6g%il*Y+g1ycc5xy
zwFGs1bdaQ(1WUANUnpDYV>RTyL(ZrMbG-3>4Q5G
zFzR=fDd#+wM0uNXZKV582G8J5Q6DVITJ@-yPoMN%rq=(~y#|Om>#r20CGBkB@QR_6
z1#1c1fA*?Go#uNJe5M-{12jGDaY4y?R!E=Uw|!pzs_Uc0y|U3;3rSExn-8N~PjRCM
zC&P^$31yl3d)_YW1rYkQ4p|4+ZVoQCB~^IMhbq1!49|RWPvPHa5jy_xDv3;b<13|<
z2keQ}3ipt5Tsa9+qD
z$#hW642m7q3AyBy`k-YvdqTbg^pIuJ)i$0A_tv8`);E(_{+t5uXLRF;LB06@a2vzt
zVTWKLeBC!`!NU^*=mIfkWD^w2ul~oAQ<&&o(d#gh+7u)FvN~#JwFYFr@B(pMe?fhR
zn_h9XhTIHnD*xcbl)`aw#zP>atQN)qq@IqNRJ0J<5m8=?a0dW)G*eVXG&$tP;GhvUN3h>DI%9mJ?{ov;j!n
z%erlHvRqRPg|EJ$cwOh{cA!618;PefAZ0$;{}z(h&5YtX8G1MPjEENA5`C$wWgu~i7umU
zb#Em+*T;SnW-rC)K&e7sYl~;?QtaB5xfoaO=(t#d23lTHqAkd{(~&Dr82+gMt5qkb
z!al38a*27CNGB9PHpw){dfTeZC>q_ll$EU9n@>xyn~i;rfhN@E#n(e)d=@$mmElVSTCT
z2%A<4*LyMvU=mFcV>)`nFrhfkJ4oo=gQBmTNq|1rztG?k9o-;WW;_UJcMr@cQz0xO
zYTd(ge^ch^>3N`MI*49j{-CPRfIjUSSx;X_9#>3PXL^FXy`2DS$Y2jDtrg2M&}(o%
zwsTc_m+BmAZ7>)2#8)6tJSC3YXy*Yg`ZL3^y9hv5G0a?Ck;5+hp0>c9cKHurr=I&|
z!*!kbeU3F<%t}kFF$S*aMYn@j-${J?n&AXcdBAld4Ea~H0<&&{zK?Y($pRT~6XAb^
zYU{VlFjO@7_=m~b{q-NwG2RXDiU_^_j%dQS#?1CR(e7;r8kgUilgfApe0{5G>Hw!i
zOO
zug+8kwxIaTj_|AO!|9b{)Y?|XZ%WhmH(j*^IhIT|v5Q|(TKbD*Txg~TD9&fCc~}AK
zDe}IIuBISQmnfS)TUvx9oUBnfc8pKgGI*wKX=5ezm#(324}0ex2*NaY!?^q;bP4q7
zz15nKFfkqOK05oUUFjlO!{%<}-9U0?HVf{7cj_J(7AmZR)H!6|8zT7D0QVMFdX43}
z2rj$4s|!X=&4b4RfXiPBiNjY>W-uttSL@OlB(vZssR9<#8q@Jd8*Q1}EncISdxmE<
z!wcj=vIoI(o67xNClaJl1{l)5Agt=oHVIWZ<`vtlQ=p$<$KDhxe+8Z}u~lGCU1Rhd
zpj$h@OJPhvvt6V4&<@>W`i)GLCp*`x9&tvY{`k(c()$S!6lp)r_a&d?N>o)wRpSc4
zTx;f$Z8Z%gm*^hbUF4sFI{1Vpbdip<+d)^Zfpa_6VOnI1?{z(c*y)(G&FHRCTo7>4
zms+u8Uo^5a3TZ3%FvsW`Vp(w_p#Md^|KjrJjMdl#5A-$Gpd4Y(QaK$PChdI|9J+N8
z*AL2O+;_KckTx|-e!x}u!70zt6X5j;Ql6Zk-TG#X>$lhrG&cYOk13o+Kxds?
zee|ZzR#JcJF!y-=pX2Ua{O8`w26SoKa0Aq?H&nt
zZPMDgUZB04un&nu9JLkR1@>>&<8hgdM6z^9s)QXcX~>k8R}pxvXoeSkUpI~)W
z@LCvhYgOqIw|W6QE8Ky0u*)EAqA_SqAMu0Sl>n7!VEIa--RzPuLHQhe+G*h%{X13J
z)&vXg!RR@bWf4BP#Fkj)r8#cTu3kn`X{GXb3GKE|^}Zc|EA4UfW(k?w4KyGrzUHf!bWO-l$EK1laHM!T0gS)1otO16+|HTy
z$BE`PVkjB1t|>tBO?{1aKw;==yuiYeI{(B1(&`cG2WN_{%4_dSt!&Glg>
z?AL|d2;Yo87;9A#q;+-u|p%97m?LCCz2e*PoRAA;Q4txk)bqZ
zxS~JB+q+W@5W)gY-%mXIjUYEheKDM&qr+)9l42oJS;=Avq@tE}a`bC7Pytu5D(F(W
z+-oL}3&(m{qz}4gD$xIm*~N@maItmS#O+|EbvcWM%=!aURApE^Tl5YThKu8e)Phaq
zm%R#?xaU}si8`KtWzH=PO{~WbIK2H^$**dtDc|5{^q?d|*BNhcx?Ksmk|3#QIGqA=
zFi*eu6KUCxn&o4N;}?FrvXGdlcL^*gwezsEqt&lbzytfb8&&Zs
zqvIPRp{Kj!lq%oCH;M0A4UBvLEPG_3p@Tg!lveawk73ZBFF2t3R^SKv`JppU{-DN9IxQ;DxKMSjkC?{QUlLs
zI3u>{^~MI<^0prP$8Qm#GV&>{6~GIDr$&_>+sIhcxn|E>(`ESj3->;oI?DgO7Y@OW
z13dN&zf*RvJPB_xk8&s(&N%q>#R_~^cz{FkTy7Rl?lEzbZ%c2qhks4j_yPl1(RS~~
zkD~ZuuV7YD`^iTzGX=Q{>KH5B5`O*muM8y7
z0;W1`Xdn=uyQb8NM-Kns+jhgs-hOI?4K(4|34Z+Z>g7ToX75%|rnb!L&irEelftWV7uVHPVz}X&tg4D*
zcA3b5Z&|DRUZh8C51Ja2;rJFVXIa#CW)1Xp9Xb7;qYoS4L4+M$z}5Gpw5}4z!GtEv
zotO#EO4`6CPl!o={1Zc|5xI@-hM!cpWxeRDvG4G
zPuX)I6$#|0rqmEBYY|)Z974yYy6uy{bJb~}5GUJ}V0$EZ>ZcK5}^6$=yF;lZa~2X0P4n>6I(e)O=XN>(a8EMU2m;LQ3Vy9eNxhUJ>Ha%
z8IY?MLCi;jO5_9WON6`8&s}M$s2`BUel+~5vW6-yUeYX;>-f;O!$8E>w!_y0PI(~Y
z4dRf|pLnH$pEwa|cJ
z&>MxFvvFJU(#xNnR4rDx!TNng;qV~dQ>S=Ea*%Mc{uu^E>#*~?F0DA@?(I7>bI4Wx
z$Dw;{lH-r|pMQa4!U&pznDH}x>hYYc11=-uZm7OK>K__zK{rFFbi2$A>q>`DC>nMT
zv|i|5z@+Y}n#~+;3jC)iHBP=$R2XJ$T7G|fne=8)Z5Y#^hy*(FXo0@(?jrn{4aC_L
z&D**TT{geptFpaL&a+P04kN=ZNW{mqz^Uzi>o&>s1=+(S5{bFqquu{jodK33uItOD
zY|l%?=~p!DPp(i&KAzyTrE^qdT@{)kkv5J&1oUu~a|_E!BS#p)NYL>cKBCx5X2r9nOr&wRc+kYSg6WZG@f}(E<(;WJMlhc(0>N%)m#xV-t
zYkMmYQ>Te{2+Q*Y+En#+UTyo+(DFHtU@`f6J*tryL5ZPsK-{^
zVGP2nfs71Asl7q<&T6WOf?bZ9c44i*Ho07Ie;MuATF**!sp;=cD_QzGBA+A{2+Pdz
zHIYjJBg-|ex?9+e8mKTL?Td!<%DV{cnyg{ZwFfmAN@rRmb0Oq~?;LsfTladRB5eu>
zLCd4mIc7b|$89>DIi7GAjj%5g-pcB>qjuApTctE;&AXL(Yr)BnJx?_>4+gIjhjg&V
zQsQcu`4l$4#l$Ijvr-&P5Q*IBJ1;uWD6=V<-Lk}c3Q=Wr2SF;}-DlCno;2C}9nIvB
zYP1oUbI7Dm1C~H4w#K2)3NZB;Wg^c`Myi9$Z
zr#xY49L<-mH|`%`)`8%?FimG?WnDy9UKYs%=Ib|ncR`J
zTX2h&iABZj0t#RqyxrHlb-9AC;XwCEHkQvE1cV^&uP=;ur-S(U=kk%fQ@#8-O_aovlOB||=G}g>FiNVK
z+g`;a7Cgu(C8@HjRiqvD%n`mG#2q~Ji@O
z)hm4yd}`n-KI$*A0}@e*NNyQtujcH_b72Ktv)$pzAPs
zA-VvU2Hfj0)wg_Nr)sobAY2Y2Rb{l~mGrt58lg$#_}SJ)HQN+&%tfEGGd4@4)-QeO
zv&Eulo7X?6zc`VTu|^SSd#W#uSGG(~O-_%CZC`2k`+WM9^4!Gqe3B4}_dZPYW)dHd
z<$~S%w>5P{9)oyatyM%>$um+nk)I*2^#ad!#JAs*Ehq~493;nCLG*84vp-3D?k6EX
zNM!7^Ded2ddz}7~$-4g7X2AFv4i6L_PgDaZIsHN)MnX8~v=?dr0Y2gX1DpdR
z4q6UH)JYd$gy3MgM2k^cQwL=p&lGFT@=JBiS(*vcXOGRx)GFn=(K;n%OGc2F5C;?S
z-!J+HfV5QjQmAh9Fk9=}CUbr?Tkl21OF0XEHPi8;vBphst|5s9nY;1d_CozOddJ$_
z?X-3ToPc=OFuc))ifT2c0~>%AW;%-zW!;EiXy^*b(WCZ!e!b=?%(P9|jiT3LUIT}u
zv?HB8$^Q&1R($g4j`swVlagyJhHvQSuQQQGi*9}AMSJO<
zWuBYh*vT1#YIPLfe#?ES`&u+TIPAs|GEeg~AfBnS7`aZy`>dgaAiE@j4LZjDPSyOk
z@G7u((3wIvux&VW+X*u8YGUe$oov!1i|KYSBy~``_`7%I5LD4^70I)jKZz8<4hsQH
z!qGn6cnM|9k?czD9INl$yUI1(zK)slrDSLQ@o>UJ9{L>Ui2^@Qu4$gn~sL(bJ|s9OBc&`Xbg&?^u7{v+(nv(b9sD)^wTejo!bXN=uwDEy5z5Z?rh_Z5i_|F`IcHDS=bS5pAvM__hN2IT!Tk^K&p#DWKPZA5Mm?~
zmgK3|^?E#GW8S;i{Xj*<_L8f`h!w&CUtOstN%>;6fgRq%rieFb;ijK1|5k7T)r_(q
zRYw(^)=>nKjO#%H>mxZiE-P@GfxQZLDqMA?<^#ufO0ql99R=Cj!f6u>MVrVmG*v)8
zcdAOZl-TAnPYfvE2X8&9!92I-l>YpqjgSY7+Uo9GDhcf|vvq3D56*36Qgyn!Ai~6c
z{1pEx9Dikn-?~N1`*AZYv_9^&4hpNoj^~lm=?6zwqF__EwkYwej=iE>>JB#C?u`kd
zqw9>=dsY<~Y)6_wH0AvJor-*+<7v;JGe=1pbcf`~p8ScW(d`*C?VfR@q<4pZJb7_|
zCC}Z==S2nL%WvZriAbKP=Mv$g6?8Eacy0JDa%F2Q!rK`7GQB?TjtbMximx^A=QfgY
zD{tmgZV9-9@XBGyLzYs#3B{2Fbt82Jf}HYcFn5S2xf+Y{*$buD{Yl8{$C$j5Ky^K&
z>f6_-zZA0E86Pv2^3=*nlcHlGI99aom9NK`Bp@^8>z)mv_=BuCPs=g?05}jMi3g;B
z9MvE#y`}f+D>Hs_wDuI?Fsq+gdR+86#ul9V59;4(mWwYxI;l9ynSLvHtJ)fiH-0#(
z#anc9~NdLQ(
zV-ib@77oj+{8WVbhpWd~@TJ@Plh@|qXO6*(T@n5R@{dA>u#4;9Wuum(<(I$Yv0
z`>!luLn!SAXc&xH%xV?iLCPZ&`;%G+ntpZN|C|7*1xz(oHKP@iun7(gd5Z)l|)=4TvCRH-iLN##5Xa`*fW74LO{P~?q(Rqn4#q%5Qn#55x~0b+yiHl2UV
zEGcOL?FjkBXLhM5w!(v*S7g}PA3I!5DGv602HTE2Aeq+){UwDfei-vg+!WKZ
zP&HOVm1|Qr@(`K%ce*XXhYJC^_4O!1YjRU84)~1+A42GSA?-N4e{gz7>k?XMz0>wCZ6XS$}v22QEXZ;M4@+J
zLp7((^^ixM4#QKbiNs92`0Ii#H@g~zm?mKLRKH~leX>QZ>f9uJ9{5BUk@u7B!aPx8
za->*(T-3BQ=;1X(%VM(IXJi6PatDMJWqP*-afQJvn(<{Z6Vw|C5#;D1X)^tB$F?UZ
zHp{`JJtOra5XT(i@{7Zo%!B0M%|mU>h15e-N6uCYh2$lWBD7!{Omc5Ms28y}1UkZ1
zYjC|ZH@`09u2^eHN1c!Km_4=y)OjjS5k&R3^0p07^2heZa{-Y3dZ-+0
zWAbl(C`IWP{Md|lMJM`$Sht%clI-*Ozqext8z6Qb{o6>OB
zaji~rCLC0OX3Ol49*g#top7xYRAPO1}}4U-S=Vg*!O6-FR)A1a5pdr
z+wd9jl*BQMu-Wmj*o~`CQhelAZaT8=uwMGKe0`o#?mm2p-IDJNXLJ_pq^I
z@&S>hb$cD&Fl`JHafU9kyhGMl>YV#EnDUDi$z?2_hQ&C!jc<-iMj3Eimi@~jN(+PI1<2j9G
z10tfh7@SoUhJW7!{ILZv*$f%-mAvN^e16WC_I0Z}_LxxmXb`mA>Y==_Y_)j@GT0VR
zap{G3_O1jMe2wt-C07N@=Uj8qNmdYg=$Yb8YjAN85S~#Co&>_98Um>^${0+?zz438
z2dUhxJ%7@BR+F~8vU#ijIG1=^07oo7e{jqWGvzG%teBm)=XRkwiHbxS4F!X2pOZ3NO_Nn=Y3F<7t)Nk+V&v76<{w7I+jYpi51vI^-zP=Cq+)`c$W
zy_$GkFj}9#%Hu{yMt2{#!hiNYh^5z3zZ*2Y
zMp`d>p)!jnDcMm1xo7PsIeEt~pb7l-Y!gR=ga$oq!S_%`IgZDLFtwsY@vDX@3Gj1c
z#dDCpDX0LwHYX862^j8=_}9$V}oR+4|Zhe)g*hF
zd*t&-G#5(0OO|`-msWd@$pgJ@|U6B$-?BL>~yFiwq{yxB|@Pyirq8A@$mJgC=vyJu-nN!)_Z%`r8eGnh0l#L3bkHm
z2{pw@q!2lFOuow&Di(Y+Nj0_Vmd&ZF1fg&bQ1EiKav4;GpmQTO=pbQ=@>k@9?R;&l
z8G(fEdS99t6W;6xM&5;cr%zsiVgLaE$Fq~T+{_Qut*WmHmzAX~7SpG=$a}D?B%TN%
zF?I>M4XCqXsnJc!2yWzWS@Vyz5?kXlvioi-ubgACO(gnI1wO-=AI%rdM69X945W@<
z1+RRA-)M8K*D2MaDMRsZ2|w`OzAd@_obU~#FbV-z0d#|Syb3%*&DgbO~Vcil_
zayCky*6US;ktiE)0Wl7-CdHyeD^HpQay1zpl(v--4z8nTvX5Uh+W4#*g;@6+xmtvT
zb7J%y9yCH}L4By$3c`{;YyOtLDkwgc{FmTyMI4QQ(VLQ~)jD?B&_jc+zl
zx!B567=jJR99h^ZQ4;CBW6wzR7FKmb11pO0f23#s8b%iZo`;Auam~64X-5QR?pe64
zmO5td0daLzYA`l?DsYD_#pOonxaIv-v8-WYm2j|j_oCPf8ud~{Csk~eFUla-JL0;S
zk9ebO1^LA>RrcRfm_OFsH`XyVmW6yyDT?H#hukX6Sl@}LjWmQhRktU9;I^}Eyk;6AH_;xaj{gGWkS;)K^A+Sal#jCaN1C$GQZk*)l+DG@
zf_mN+A43?h5;jQD>b;G3m7WVr{W
zY1>=Sv;tP1Y0Oqv-QozOKsE*(>b32cnA$Y(v)Q9k>6aaj29BsFfmXuR`F#)ZSib&p
zq%%#7#UEQoD{fE^!D1`Wx35jRmDUkfk1#S)JX*!U^#ix~t|otSnuo;N+L)B0CsHCI
zk#chHLLclzCL`vil)xje&>=cX#ry!4I#$+;10Mq(C4LZx>2m~rCrZ>~Oe{rkdDSJ=
zNwsDA$0&3Eok{J86T(yzC*
zuilismNNg6Yb#t&_Z$+<7)N#HUV(Z&rGW7y%3vi?ZWG7Dka{gX4
zrLelTw7+r^)KfrWwR!3lh}6TL@BOY6_zEE4$RVETtv8}WnG%o(rtW>aAoE<8`VYV{
zl2XPtESli(J6%8oA=RpNbT@sX;SzUj4M`0HTk00^P`X3^P%VBLe<`HEat`BO$yg8d
zI6}OWC)^O6+lbnx1V!kY;P5EHK;m2P$JWJht(YYDd>+QIn9tUy0%!PfZ^{}N-E(y{
zmL;B=@f=(Ge?$vt(cQFP2OpBV%!D}o0~oI$f;PWp&wgy3IfM@+<5``g=@Y-Hk3RWL
zDm``z?2KJ0+)PN4xsGqVmKP@-LDYig(Jj6btqqpT&RloQ7(zvsYpsxhLU57Mz>mSKN%<9Zl
zo}2?lg2VGpzz7jidUXetzlkl|s>~}^*KVZRJvg)*pWxe)YLoSj&K{dnEEoGedZVt-
zy%8^VR(~_a1U7%O9Fi=ivQ^ObwR}4~48{G;)tm~3+ku6bB?3?fI)}zL!!Oi4Td+$!
zp+X0T9;J*VoHP2oloiv1DolfTETv_}R>q|M%B@V=3rcyXMtwgU-tif=`*@$7q75F}
zW*|f#TWhm*Jn+5!UKK|^+R!BL@$$3;nqTABgaXq~exOxscpXh{RW7p5@6c1NwgARs
z!dsB17!pKHP1vcP(``UpSalyORygt&mfOm@6oDdo@^6ujLo&`@vZJ}z4uK($x->x%gu1pY>OqXoZ=
zhcNmeqIJm7fmi*07KY5)HNEDy}}ejA?}@_(${%l&~yst5h}K!d9!=mXV`;kUCKJllSDU%9JOy}?tw
z17-3*hIry#+8~a8jI)Hw*2k(ca+;NuQQ;LCIqr+8qmEjd>GmDQi_=jLxLA&9)-6=!
zUF+mlm|?WO4>Up*&T_%Jm0yfU(&~Egvj(x+!bp%E%&i+(qtN-kXqPwv@K~~rMe1#
zRy}Y<3E%c+&F5_}C}J#k^H*%eatM>F-ByYtr#ZF{n{cq>Lb60e>!Giv9q{H{0B
ztVe#l{8ckWF}apW27OkycOZ4#bLH4MrDc@Ck_0kS^la-b`jp2sx^=EAiL0kad>5C5
z7V)*N;q0a}7X-1Cetbj6ELnd}hb3<@Mo4$Oo3*ut`V1r+zXKe1$iT15
zYfLHB?@UdD8HV={UUx?)b^)xu}0bPb==ENK+Z=j_9!au-uU-!Ceu7K{U>PEdYlY5zp`TiwCO}GUDPj*1zHfHL>7vK4Z
zXN2{L+`3S7@E*l7qCVpnzg@@zJp(oGh%?PFnCO^G3|EGh#H^;ZsVoFg1J_|RzhB-L
z;PcfpB1irQ*ta5=+ClEu525!gYZ$q=Svsq&;K(2TX}s^cTW&X)Vg=%+4tBB{zMJI`
z>mnnRFq)i<6JjX-R->)|UbtzRfkpF#S#ADhIQm
zzS;V~2YV6ka`v#gm@T&u?drb%y-{V+w40v~q_M;3@T>Kg|7>fdym$W}2MTWM)R-dV
zcXowBo`F13%S&ed#EmxcBi{$SUO%PmtJsf~{&>x3PP&qApr_1`U>M6gVuO_z5GxZD
z%&Zt!){K{fm$q$YB(Fs{>y5qP@mn*Iw8~8bP2HDJ#PLMz`5r`$vv)A>q%ewJUq0)r
zSI@#$QBvdCJ8MPO_l;A`vj5e5oRUr)UpGk|saDdqU|JWCmav&_hYQrWngf67qcWvR
zR5wQS-e-NeO2EY`-UmjL$Lezw?6XJr2ud>pa~a&|nEmRXaa$w4hk{Q}B9%U!olr`q
zyfyDsm>1Ui-p%@b;&mjUAMqGFmWLQqciREh8ASj~A>V*GGkJA$?0oqCp7)8Q&6yP}
zY4~><(xW@IB|2;Dh=uyzS(TLsIF=`Pm@yzn_Qgq9u}a`utcDDIZ?16CKLGIu`d~6(
z!otDhTuo_hiXY*JsTF@hn0Z@dB4LTxZt~))jgC?0gB&}9Ybs&!Y;?8y$j6{=^By`p
z4+*duN`m<7%;dU{5yrM-AXSVB&=$Iqg6A9!894+GdarTPF
zhO_|_{2Dv}9+EEMPK$|}@q8O-Fc4n%ST0*<(Q2MBuZ1A|69r*(8cY
zhA<{CPA;5?5SZ?J$UbnTJSM!yYEh%TrOQyU>2KZ@CFqyK8b9OBMeXqJoJhoMFE}7E
zr6N8`fX~N^sXDQ;w5puf+KMg1Fj`!Ku`e)u7YTg4C0eKASEnpi)+Y!ZZQZ&iSiY_{
zt#R7nZP_U;UD?4DFd=>4%*Z
z{noX)X{Xq{Vdua=RMgCR1&-U^8H}Aj`oRHBnHE2L5-S0O!S$6TT(NS0+PQzr?RGPJ
zwX^~?=kO8El#f4Knz+P=Jc}j#7MC{&j?bz8+t~lN>|E0k4L^$4!(x5Ck&4t-oJdkX
z!bGgIGN;A#vn=qHQ9;^D9zU=sySZiQ*`@SF^;}+knpgTxhUGSJnsCW%qQO23~!e
zc8br1>sNyz+3@md4Ak(7N}YrqBt>=`(CF@Wi63RwnUY;n9&$)^7BaAfs5xWXM)ci7
z{i;#R1kz60QNbI{hY}$tl`-hvu*}kwVw|4=Pl1S?Zs)Z)fwoiJ!5ZXQa+{DOD@#BR
z)5!r!i9Vk^O1miY!KuoSKTg`TT?bF9QvKs
zjmXEgxu0qXq;zU+aK}4a`k@evNbA&E2qw2Dm-s!S?8};nNhHhZ80I0|gB4c#gF#Fg
zzWVhRPh!EYLY$S1o@UKN$T2Dm7Pz{|m*td7xtdG3a^7MNUxi7Kvym~zkBV($aTV8<
zL3KC<9^}Bj_z;9g0ssQbz#lvzE)`H_!K)R$Kd*i2(CsMl0%(7wcTQ|7toZheoD06U
z7i~2$op3ZG!1<0{M=&g`W>c;60xqR7|4uHEBXXgZJf*?9DzTJ4MQpr4a>w_8tQctk
zqzoBLPg4Zkv)Yap)}qVa4RT=W=7ALQ0g@L&$bul^o055ELxJ!dv+ZhmhWGRj@ez;xC?MU*$%Ty+4U
zekj3VdBC}C)zRP4_$H{427BQz>>QEpjDwQQoIco%j(Y%v8U=6oD24HrX5VVcPQJJw
z-(U-kN(I@SZi}PLmQQp^(XfvWZv%Puo6-LvzzD|Ee#{O0_}CUQ7?vzHiVmtJwlu5ytKH7$u(vq^Q6C2benI@7DG
z_)L#t70n8!CW`WHSwPal=`k3ZcY-m1&&+?Kv;#Ms*bJQ}658w)`~f0m8x(s2K&J5#
z7}ed49!eU{7E71c)Ow>!%ytog4yDx^t<#(33n9=}0m
zpXe?I)I-;~u9#m8!LE9xi^OULbp9x1ft=#WMxxzrL!CMHsP7unDZGJORzh9YxBq!R
zlfU>{5aImBy#LKxke!3_r@KE6{{`_6*50Ns(YCO^LB#EZ+xmjU@>cbbtN=O!pdqtI
zf7F_DGI5P)J!~oe_1;J-L9QoM<2J0b33*TVY{Q>Y)c7}>p~2#hwvfJWH&o50!%|Tm
zY>t~(x>aTHxAfKZ4lOP(jk_2T+K-{wv3MiZKdo`1IHuZN}jQlU*pFk;>Pj=MU{{XN4tJ-Sb;zWTETF{bvGyJBRc~0=F
z0yVbZk2g<8KO3RP$;#s&rhRd(c=&R(8BB~SOF;?DFh9eX1y0x@$U4Q+RiPj2~i`Q`)`0({gC
zJr7+CopUNrhmIo_!3oTqaFn@G`3*=aJ^N3gkKS+Ym(PfoRPgwJN{y<=wZOyJ#T;5C
z3o;aSzOR2ze=pm<2%Xh$y{k{u5}LmJwVEAxP!+wbemA+!W$yPXNWwIt|Hh6}&DL9C
z5|A3SZM5)-M!Zhx<6)>g4_sI+VpS4~E6;y{9~m<<*UBN)jMIR~$8*Kl2hMu@QSy2*
zv3q&9XdI*zB{>UG@WJJZQF9K>{7wRmcvRv}$%hrA?|VaD7*K^}1x}|_z@Q1T?DdW`
znQc-Ea;BH>wT1F65sdGGWBXlGjv>~bL_F^NfG#DkT9o$j^Q`{YzmVGzG?;I`=hXE7
z6%o{Qk7k;bD)#rsmv3Y!ycx%MB^2h+7Ub901ML|Qa)eBdUxM)$IL&}k+=^Om*D2DX
z;T|EEJi(G#)?)6ndK9BhcL|i7NFGE0H?M$VE3{r?#Fjl3?h}JGg8ANy;NXVJQ7Iwm
zMc|@~Ppf=4RaZwa%U74r0UNW3&h4|uhQ*^_4(3ozUhJY_n~}&i^iFMOuXNP81;;Bv
z)M3WD@t89?9wDz2xR<3BJ1-keBofYRx=6zDI{I#NL`Wbc(mvPSw;xfTy
z-U9*kcpWEs9nWO*{{Pg(LYnSB2^zAhvc!uFNTq1YTE=S7H|a+oEQLrzJu
zT2UcXMpG2cVROio^RbrGH#rpBqMTAT))1v+e+W#>vlBfQ(NqtEVD8qDA6dz!x!7EpmAzGaRuq;d
zstvx@z~U}d8oP8{2)RawU6dkGBo&Q7IBlz}P&iNtrEID4Mt@|dazEKu`PSIL#y%&_
z6b;k)^(oSS_ZH5x(wulLqcB%YbHD`Bx3qPss<0qt;&WdYaIbP@)Um30TD7q!C;1ap
zI2q661Z2b|`Us|CnPtxPzE3c%GE5^zSeD08-4;CG@3W$J^tbRipP@?C&bGn;kAodP
zXeG1-AxG=5V%PnNEeE4sf}67qD(_xxcp9TD{*cK1QABk*G%4E%v6T#fzQ^6+SH0L(
zi2vrI!j>-i{tO+tm7?Drol>+MCZ6+KXbrcZJrlFUx^S65-J5^Z^-m^07RQ#Vx3
zX};@bhP^}grN_E&-k*?~GIkDFE2xdbwl@@U#^U?K`^CVmhBv$%wa&?Z+#!vwTpd~+
zjtjA6-v^qYDYBZFu5DcKpSJ}{)t+62OTJ6qbnT2O?*ZOvtJ$X6haaIT!nh%Q=V_Cn
zgO+)&+k_nfgR;Yc6T@h6K5#E`wQGW*07#Jpm6{IERG&B{ssPj%0H<+P95B~`gC})iY)4i0c!NbyjRBC%qEF2B@eZ^QIguE!NUUc-u&MY#ytjR8*T<7qRbDQ
zsC!;supvS;i!u6heug(a+&WdS!A4+nc(%H^E8`RNs2$J#9JA1N8&$)9UP%9Mpx6VaP=$C)}=t_tmtzIpnL8J~~y;JL^owP}b?hu(D|&&>;D3b?ZCN
z4UhGXWTloXI@{Sq?0qE%X(*=E`LX>Ti#U5yJSlqnH)T97p1=ocH%;>0zaBjkv<<-!
zTejeHJS%&FE
zW64ZGjZ;Y%=0!QoXS*nDi}eCbED6vcY
zh!puQbtKv;oWCNu+VvBZ89N;%XR{&YghE`0qCNlmYu|%buPatNmb^n8iq<-KD0XxB
ztkr5NHE0sSnJ`&WS+oD}_`zMKK;k&ZD_&bh{sg^KA=8H$toXV$;`onw7#ElZQw{xO
zRMt5$98`GoCumX69Qo=B@N1=TNxEMz=M@jQd*CJxGZ2|>%TJ2TAFO-vES@Wid(1<#
zM?wX(7wFT08(XOQt4!z^6(xvLN_Hq#DXJj_{`jUK^v^7`o`hrL+ut_*1OfXC7WGV#
zjj_}=G&gw`7-oB}Et|}$kfrGA1mFxphq8kFq&1+w+1=o;$!d$X`?_nut4EY*X|OF)
z5AIDgO|Tv$Qjm=S*@B?!i)DdnSglE^#uwNL>qm%wKggy
zjBxr#kBezmE`xynTEC`cIB0+{blMC1*y9OhPw)0UK1Iw+xbK}m7119C8ExP3$tNHX
z(KBjeUl0pkQD$PlgS$%@&*j7MCu3eB(lmPCbdP*!zAa+kt8QCW61hCEk1-ZO<9n5o
z?iADXHQcDZb9-eoM?$|WX|zGogWcZL*{s+PTZV2K63@Y`ulQy`Yv{6rsLA8szcSTH
zR`WHMHo2q+7kRy5WIS!$4?^uQ*kEu$-qSsK`4rAUJYkdn(bFw69ejCRm+UNf)J}_J
zBlf$q7JfAMScpc6HTN`E*Dpb8aYvwi^5XcS|8!(Qs`yMgai(wUf?65J+e+tBZmg0<
z37s1}-EwZdc{e-mFX=uN#A|yeRtC-khssqAew0FD99gYc1%!Gf9YWz#p-@F2bV9KP
z*1Q4A<+MdJ0i~-)kLb=bw#u~}kq~$V#R_g`i_EhOVZ)GIkL)M*vOQ)1Qv>bKHWwVdM!aD-J+_p2)8t}1Dck%3~v
z+tFy&7vRGM%D7GB5iwr~^8YVr>jJz&m=P%t?Di8B3R8%Gi%|yppb{R0NaE&g*Yah^
t#r?WiDFSr-ek>*u%5H8Ol5KAN;s
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