- 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)