- Introduced "Caddy" functionality to organize apps within the app drawer.
- Allows grouping of applications for better accessibility and user experience.
- Serves as a foundational feature for enhancing app drawer usability.
* feat: Allow re-arranging popup menu items
* Refactor draggable preferences
* Refactor options pop-up drag and drop view
- Move to new screen
- Separate preview and options
This commit addresses a NullPointerException that occurs when updating
widget options in the WidgetSizes class. The fix includes:
- Adding null checks for sizeOptions and currentOptions
- Comparing new sizes with current sizes before updating
- Catching and logging exceptions during widget option updates
- Returning null from getWidgetSizeOptions if it fails to create a valid Bundle
These changes should resolve the "Attempt to invoke virtual method 'void
android.os.Bundle.putAll(android.os.Bundle)' on a null object reference" error
and improve the robustness of widget size updates.
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.os.Bundle.putAll(android.os.Bundle)' on a null object reference
at android.os.Parcel.createExceptionOrNull(Parcel.java:3075)
at android.os.Parcel.createException(Parcel.java:3053)
at android.os.Parcel.readException(Parcel.java:3036)
at android.os.Parcel.readException(Parcel.java:2978)
at com.android.internal.appwidget.IAppWidgetService$Stub$Proxy.updateAppWidgetOptions(IAppWidgetService.java:1017)
at android.appwidget.AppWidgetManager.updateAppWidgetOptions(AppWidgetManager.java:727)
at com.android.launcher3.widget.util.WidgetSizes.lambda$updateWidgetSizeRangesAsync$0(Unknown Source:31)
at com.android.launcher3.widget.util.WidgetSizes.a(Unknown Source:0)
at ba.a.run(Unknown Source:10)
at android.os.Handler.handleCallback(Handler.java:958)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:230)
at android.os.Looper.loop(Looper.java:319)
at android.os.HandlerThread.run(HandlerThread.java:67)
Caused by: android.os.RemoteException: Remote stack trace:
at com.android.server.appwidget.AppWidgetServiceImpl.updateAppWidgetOptions(AppWidgetServiceImpl.java:2193)
at com.android.internal.appwidget.IAppWidgetService$Stub.onTransact(IAppWidgetService.java:500)
at android.os.Binder.execTransactInternal(Binder.java:1375)
at android.os.Binder.execTransact(Binder.java:1311)
- Adding null checks before calling methods on mWidgetHost
- Ensuring the listening flag is always updated, even if an exception occurs
This should resolve the "java.lang.NullPointerException: Attempt to read from
field 'com.android.server.appwidget.AppWidgetServiceImpl$ProviderId'" error
and improve overall stability when dealing with widgets
error: Uncaught exception
java.lang.RuntimeException: Unable to stop activity {app.lawnchair.nightly/app.lawnchair.LawnchairLauncher}: java.lang.NullPointerException: Attempt to read from field 'com.android.server.appwidget.AppWidgetServiceImpl$ProviderId com.android.server.appwidget.AppWidgetServiceImpl$Provider.id' on a null object reference in method 'android.util.SparseArray com.android.server.appwidget.AppWidgetServiceImpl$Host.getWidgetUids()'
at android.app.ActivityThread.callActivityOnStop(ActivityThread.java:5484)
at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:5456)
at android.app.ActivityThread.handleStopActivity(ActivityThread.java:5525)
at android.app.servertransaction.StopActivityItem.execute(StopActivityItem.java:43)
at android.app.servertransaction.ActivityTransactionItem.execute(ActivityTransactionItem.java:45)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2423)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:233)
at android.os.Looper.loop(Looper.java:334)
at android.app.ActivityThread.main(ActivityThread.java:8348)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:582)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1065)
Caused by: java.lang.NullPointerException: Attempt to read from field 'com.android.server.appwidget.AppWidgetServiceImpl$ProviderId com.android.server.appwidget.AppWidgetServiceImpl$Provider.id' on a null object reference in method 'android.util.SparseArray com.android.server.appwidget.AppWidgetServiceImpl$Host.getWidgetUids()'
at android.os.Parcel.createExceptionOrNull(Parcel.java:2446)
at android.os.Parcel.createException(Parcel.java:2424)
at android.os.Parcel.readException(Parcel.java:2407)
at android.os.Parcel.readException(Parcel.java:2349)
at com.android.internal.appwidget.IAppWidgetService$Stub$Proxy.stopListening(IAppWidgetService.java:792)
at android.appwidget.AppWidgetHost.stopListening(AppWidgetHost.java:274)
at com.android.launcher3.widget.LauncherWidgetHolder.stopListening(Unknown Source:2)
at com.android.launcher3.widget.LauncherWidgetHolder.setShouldListenFlag(Unknown Source:40)
at com.android.launcher3.widget.LauncherWidgetHolder.setActivityStarted(Unknown Source:1)
at com.android.launcher3.Launcher.onStop(Unknown Source:25)
at android.app.Instrumentation.callActivityOnStop(Instrumentation.java:1496)
at android.app.Activity.performStop(Activity.java:8599)
at android.app.ActivityThread.callActivityOnStop(ActivityThread.java:5476)
... 14 more
Caused by: android.os.RemoteException: Remote stack trace:
at com.android.server.appwidget.AppWidgetServiceImpl$Host.getWidgetUids(AppWidgetServiceImpl.java:4444)
at com.android.server.appwidget.AppWidgetServiceImpl.stopListening(AppWidgetServiceImpl.java:866)
at com.android.internal.appwidget.IAppWidgetService$Stub.onTransact(IAppWidgetService.java:311)
at android.os.Binder.execTransactInternal(Binder.java:1179)
at android.os.Binder.execTransact(Binder.java:1143)