* Initial Patches for to support Q,R and S - TODO create Widget Factory Holder * Remove tracing * Fixed Resources$NotFoundException Lawnchair (Debug) bug report 15-Nov-2023 2:32:03 pm version: 13 Dev (#2291) (13) commit: c5bed50 build.brand: samsung build.device: m30s build.display: RP1A.200720.012.M307FXXS4CWC2 build.fingerprint: samsung/m30sdd/m30s:11/RP1A.200720.012/M307FXXS4CWC2:user/release-keys build.hardware: exynos9611 build.id: RP1A.200720.012 build.manufacturer: samsung build.model: SM-M307F build.product: m30sdd build.type: user version.codename: REL version.incremental: M307FXXS4CWC2 version.release: 11 version.sdk_int: 30 display.density_dpi: 420 isRecentsEnabled: false error: Uncaught exception android.view.InflateException: Binary XML file line #27 in app.lawnchair.debug:layout/task_desktop: Resource ID #0x106002f Caused by: android.content.res.Resources$NotFoundException: Resource ID #0x106002f at android.content.res.ResourcesImpl.getValue(ResourcesImpl.java:255) at android.content.res.Resources.getColor(Resources.java:1169) at com.android.quickstep.views.DesktopTaskView.onFinishInflate(DesktopTaskView.java:124) at android.view.LayoutInflater.rInflate(LayoutInflater.java:1134) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1082) at android.view.LayoutInflater.inflate(LayoutInflater.java:680) at android.view.LayoutInflater.inflate(LayoutInflater.java:532) at com.android.launcher3.util.ViewPool.inflateNewView(ViewPool.java:106) at com.android.launcher3.util.ViewPool.lambda$initPool$1(ViewPool.java:69) at com.android.launcher3.util.ViewPool.$r8$lambda$wSRnQcMZiOmM7xwf4gm88rNehhg(ViewPool.java:0) at com.android.launcher3.util.ViewPool$$ExternalSyntheticLambda1.run(R8$$SyntheticClass:0) at java.lang.Thread.run(Thread.java:923) * Fix java.lang.NoClassDefFoundError OnBackInvokedCallback$Stub java.lang.NoClassDefFoundError: Failed resolution of: Landroid/window/IOnBackInvokedCallback$Stub; at com.android.launcher3.QuickstepTransitionManager.<init>(QuickstepTransitionManager.java:265) at com.android.launcher3.uioverrides.QuickstepLauncher.buildAppTransitionManager(QuickstepLauncher.java:302) at com.android.launcher3.uioverrides.QuickstepLauncher.setupViews(QuickstepLauncher.java:236) at app.lawnchair.LawnchairLauncher.setupViews(LawnchairLauncher.kt:244) at com.android.launcher3.Launcher.onCreate(Launcher.java:518) at com.android.launcher3.uioverrides.QuickstepLauncher.onCreate(QuickstepLauncher.java:527) at app.lawnchair.LawnchairLauncher.onCreate(LawnchairLauncher.kt:186) at android.app.Activity.performCreate(Activity.java:8057) at android.app.Activity.performCreate(Activity.java:8037) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1341) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3688) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3864) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2253) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loopOnce(Looper.java:201) at android.os.Looper.loop(Looper.java:288) at android.app.ActivityThread.main(ActivityThread.java:7870) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003) Caused by: java.lang.ClassNotFoundException: Didn't find class "android.window.IOnBackInvokedCallback$Stub" on path: DexPathList[[zip file "/data/app/~~xd_Rtvu8nzsZdmkjP4cE7A==/app.lawnchair.debug-LCjip_oNAIceiLCO_DoA3g==/base.apk"],nativeLibraryDirectories=[/data/app/~~xd_Rtvu8nzsZdmkjP4cE7A==/app.lawnchair.debug-LCjip_oNAIceiLCO_DoA3g==/lib/arm64, /data/app/~~xd_Rtvu8nzsZdmkjP4cE7A==/app.lawnchair.debug-LCjip_oNAIceiLCO_DoA3g==/base.apk!/lib/arm64-v8a, /system/lib64, /system/system_ext/lib64, /system/product/lib64]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:218) at java.lang.ClassLoader.loadClass(ClassLoader.java:379) at java.lang.ClassLoader.loadClass(ClassLoader.java:312) at com.android.launcher3.QuickstepTransitionManager.<init>(QuickstepTransitionManager.java:265) at com.android.launcher3.uioverrides.QuickstepLauncher.buildAppTransitionManager(QuickstepLauncher.java:302) at com.android.launcher3.uioverrides.QuickstepLauncher.setupViews(QuickstepLauncher.java:236) at app.lawnchair.LawnchairLauncher.setupViews(LawnchairLauncher.kt:244) at com.android.launcher3.Launcher.onCreate(Launcher.java:518) at com.android.launcher3.uioverrides.QuickstepLauncher.onCreate(QuickstepLauncher.java:527) at app.lawnchair.LawnchairLauncher.onCreate(LawnchairLauncher.kt:186) at android.app.Activity.performCreate(Activity.java:8057) at android.app.Activity.performCreate(Activity.java:8037) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1341) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3688) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3864) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2253) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loopOnce(Looper.java:201) at android.os.Looper.loop(Looper.java:288) at android.app.ActivityThread.main(ActivityThread.java:7870) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003) * Clean up and add our own window manager proxy - Add our own LawnchairWindowManagerProxy based on SystemWindowManagerProxy to reduce conflict when merging aosp * Keep androidx.core.app.CoreComponentFactory java.lang.ClassNotFoundException: Didn't find class "androidx.core.app.CoreComponentFactory" on path: DexPathList[[],nativeLibraryDirectories=[/data/app/app.lawnchair.debug- * Fix crash on LauncherPreviewRenderer on A10 FATAL EXCEPTION: main Process: app.lawnchair.debug, PID: 8873 java.lang.NoSuchMethodError: No interface method getCurrentWindowMetrics()Landroid/view/WindowMetrics; in class Landroid/view/WindowManager; or its super classes (declaration of 'android.view.WindowManager' appears in /system/framework/framework.jar!classes3.dex) at com.android.launcher3.graphics.LauncherPreviewRenderer.<init>(LauncherPreviewRenderer.java:246) at app.lawnchair.views.LauncherPreviewView.renderView(LauncherPreviewView.kt:138) at app.lawnchair.views.LauncherPreviewView.loadModelData$lambda$3$lambda$2(LauncherPreviewView.kt:109) at app.lawnchair.views.LauncherPreviewView.$r8$lambda$cYc0chie-2LAfMVJGiDN9mdIeDA(Unknown Source:0) at app.lawnchair.views.LauncherPreviewView$$ExternalSyntheticLambda1.run(Unknown Source:6) at android.os.Handler.handleCallback(Handler.java:883) at android.os.Handler.dispatchMessage(Handler.java:100) at android.os.Looper.loop(Looper.java:214) at android.app.ActivityThread.main(ActivityThread.java:7356) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:940) * Add our own LawnchairWidgetHolder * Reformat * improved readability * Pass spotless * Fix Resources$NotFoundException Lawnchair (Debug) bug report 19 Nov 2023 12:06:33 pm version: 13 Dev (#2327) (13) commit: 9683178 build.brand: Teclast build.device: T40Pro_2022_EEA build.display: V1.02_20230826 build.fingerprint: Teclast/T40Pro_2022_EEA/T40Pro_2022_EEA:12/SP1A.210812.016/221010:user/release-keys build.hardware: ums9230_1h10 build.id: SP1A.210812.016 build.manufacturer: Teclast build.model: T40 Pro_EEA build.product: T40Pro_2022_EEA build.type: user version.codename: REL version.incremental: 221010 version.release: 12 version.sdk_int: 31 display.density_dpi: 280 isRecentsEnabled: false error: Uncaught exception java.lang.RuntimeException: Unable to start activity ComponentInfo{app.lawnchair.debug/app.lawnchair.LawnchairLauncher}: android.content.res.Resources$NotFoundException: Resource ID #0x7f0700b8 type #0x5 is not valid at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3683) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3840) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:105) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:136) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:96) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2252) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loopOnce(Looper.java:201) at android.os.Looper.loop(Looper.java:288) at android.app.ActivityThread.main(ActivityThread.java:7941) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:553) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003) Caused by: android.content.res.Resources$NotFoundException: Resource ID #0x7f0700b8 type #0x5 is not valid at android.content.res.Resources.getFloat(Resources.java:1224) at com.android.launcher3.DeviceProfile.(DeviceProfile.java:397) at com.android.launcher3.DeviceProfile$Builder.build(DeviceProfile.java:1938) at com.android.launcher3.InvariantDeviceProfile.initGrid(InvariantDeviceProfile.java:441) at com.android.launcher3.InvariantDeviceProfile.initGrid(InvariantDeviceProfile.java:339) at com.android.launcher3.InvariantDeviceProfile.initGrid(InvariantDeviceProfile.java:353) at com.android.launcher3.InvariantDeviceProfile.(InvariantDeviceProfile.java:213) at com.android.launcher3.InvariantDeviceProfile.$r8$lambda$DNcXzmawjoq65q3wgQi9M48DryY(Unknown Source:2) at com.android.launcher3.InvariantDeviceProfile$$ExternalSyntheticLambda4.get(Unknown Source:0) at com.android.launcher3.util.MainThreadInitializedObject.lambda$get$0(MainThreadInitializedObject.java:60) at com.android.launcher3.util.MainThreadInitializedObject.$r8$lambda$xtvr3aByNYHC2nsBQ97HC1SKg4A(Unknown Source:0) at com.android.launcher3.util.MainThreadInitializedObject$$ExternalSyntheticLambda0.get(Unknown Source:4) at com.android.launcher3.util.TraceHelper.allowIpcs(TraceHelper.java:84) at com.android.launcher3.util.MainThreadInitializedObject.get(MainThreadInitializedObject.java:59) at com.android.launcher3.LauncherAppState.(LauncherAppState.java:166) at com.android.launcher3.LauncherAppState.(LauncherAppState.java:109) at com.android.launcher3.LauncherAppState$$ExternalSyntheticLambda12.get(Unknown Source:2) at com.android.launcher3.util.MainThreadInitializedObject.lambda$get$0(MainThreadInitializedObject.java:60) at com.android.launcher3.util.MainThreadInitializedObject.$r8$lambda$xtvr3aByNYHC2nsBQ97HC1SKg4A(Unknown Source:0) at com.android.launcher3.util.MainThreadInitializedObject$$ExternalSyntheticLambda0.get(Unknown Source:4) at com.android.launcher3.util.TraceHelper.allowIpcs(TraceHelper.java:84) at com.android.launcher3.util.MainThreadInitializedObject.get(MainThreadInitializedObject.java:59) at com.android.launcher3.LauncherAppState.getInstance(LauncherAppState.java:97) at com.android.launcher3.Launcher.onCreate(Launcher.java:492) at com.android.launcher3.uioverrides.QuickstepLauncher.onCreate(QuickstepLauncher.java:527) at app.lawnchair.LawnchairLauncher.onCreate(LawnchairLauncher.kt:205) at android.app.Activity.performCreate(Activity.java:8060) at android.app.Activity.performCreate(Activity.java:8040) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1329) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3653) ... 12 more * Keep InputMethodService.canImeRenderGesturalNavButtons --------- Co-authored-by: Goooler <wangzongler@gmail.com>
Lawnchair 13
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 options for customization.
This branch houses the codebase of Lawnchair 13, currently in development and based on Launcher3 from Android 13. For Lawnchair 9 to 12.1, see the branches with the 9- to 12.1- prefixes, respectively.
Contribute code
Whether you’ve fixed a bug or introduced a new feature, we welcome pull requests! (If you’d like to make a larger change and check with us first, you can do so via Lawnchair’s Telegram group chat.) To help translate Lawnchair 13 instead, please see “Translate.”
You can use Git to clone this repository:
git clone --recursive https://github.com/LawnchairLauncher/lawnchair.git
To build the app, select the lawnWithQuickstepDebug build type. Should you face errors relating to the iconloaderlib and searchuilib projects, run git submodule update --init --recursive.
Here are a few contribution tips:
-
The
lawnchairpackage houses Lawnchair’s own code, whereas thesrcpackage includes a clone of the Launcher3 codebase with modifications. Generally, place new files in the former, keeping changes to the latter to a minimum. -
You can use either Java or, preferably, Kotlin.
-
Make sure your code is logical and well formatted. If using Kotlin, see “Coding conventions” in the Kotlin documentation.
-
Set
13-devas the base branch for pull requests.
Translate
You can help translate Lawnchair 13 on Crowdin. Here are a few tips:
-
When using quotation marks, insert the symbols specific to the target language, as listed in this table.
-
Lawnchair uses title case for some English UI text. Title case isn’t used in other languages; opt for sentence case instead.
-
Some English terminology may have no commonly used equivalents in other languages. In such cases, use short descriptive phrases—for example, the equivalent of bottom row for dock.
Quick links
You can view all our links in the Lawnchair Wiki.