Project: titanium
Issue TIMOB-20089: Android: setting a view layout to null crashes the app
When setting a view's layout to "null", the app completely crashes: {code} [ERROR] TiApplication: (main) [396,396] Sending event: exception on thread: main msg:java.lang.RuntimeException: Unable to start activity ComponentInfo{com.jolicode.testview/org.appcelerator.titanium.TiActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference; Titanium 5.0.2,2015/09/30 12:07,92c2265 [ERROR] TiApplication: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.jolicode.testview/org.appcelerator.titanium.TiActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference [ERROR] TiApplication: android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325) [ERROR] TiApplication: android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) [ERROR] TiApplication: android.app.ActivityThread.access$800(ActivityThread.java:151) [ERROR] TiApplication: android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) [ERROR] TiApplication: android.os.Handler.dispatchMessage(Handler.java:102) [ERROR] TiApplication: android.os.Looper.loop(Looper.java:135) [ERROR] TiApplication: android.app.ActivityThread.main(ActivityThread.java:5254) [ERROR] TiApplication: java.lang.reflect.Method.invoke(Native Method) [ERROR] TiApplication: java.lang.reflect.Method.invoke(Method.java:372) [ERROR] TiApplication: com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) [ERROR] TiApplication: com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) [ERROR] TiApplication: Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference [ERROR] TiApplication: ti.modules.titanium.ui.widget.TiView.(TiView.java:25) [ERROR] TiApplication: ti.modules.titanium.ui.ViewProxy.createView(ViewProxy.java:33) [ERROR] TiApplication: org.appcelerator.titanium.proxy.TiViewProxy.handleGetView(TiViewProxy.java:485) [ERROR] TiApplication: org.appcelerator.titanium.proxy.TiViewProxy.getOrCreateView(TiViewProxy.java:471) [ERROR] TiApplication: org.appcelerator.titanium.proxy.TiViewProxy.realizeViews(TiViewProxy.java:509) [ERROR] TiApplication: org.appcelerator.titanium.proxy.TiViewProxy.handleGetView(TiViewProxy.java:493) [ERROR] TiApplication: org.appcelerator.titanium.proxy.TiViewProxy.getOrCreateView(TiViewProxy.java:471) [ERROR] TiApplication: org.appcelerator.titanium.proxy.TiViewProxy.handleAdd(TiViewProxy.java:672) [ERROR] TiApplication: org.appcelerator.titanium.proxy.TiViewProxy.add(TiViewProxy.java:566) [ERROR] TiApplication: ti.modules.titanium.ui.WindowProxy.windowCreated(WindowProxy.java:237) [ERROR] TiApplication: org.appcelerator.titanium.TiActivityWindows.windowCreated(TiActivityWindows.java:33) [ERROR] TiApplication: org.appcelerator.titanium.TiBaseActivity.windowCreated(TiBaseActivity.java:458) [ERROR] TiApplication: org.appcelerator.titanium.TiBaseActivity.onCreate(TiBaseActivity.java:551) [ERROR] TiApplication: org.appcelerator.titanium.TiActivity.onCreate(TiActivity.java:18) [ERROR] TiApplication: android.app.Activity.performCreate(Activity.java:5990) [ERROR] TiApplication: android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) [ERROR] TiApplication: android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278) [ERROR] TiApplication:	... 10 more {code} Steps to reproduce: * create a new Alloy application * app/controllers/index.js : {code} $.index.open(); {code} * app/views/index.xml : {code}	{code} * app/styles/index.tss : {code} '.horizontal': { layout: 'horizontal' } '.oh-shit': { layout: null } {code} * compile and run the app, it crashes at startup on android Reason: The [TiView class constructor|https://github.com/appcelerator/titanium_mobile/blob/bc85170157d3bebc5de1d61a9fe6e34bce84a8c9/android/modules/ui/src/java/ti/modules/titanium/ui/widget/TiView.java#L23] does not correctly check that the layout property is not null, and it crashes on line 25 when calling {{equals()}}. Expected behavior: The app should not crash and the view should have the default layout ({{LayoutArrangement.DEFAULT}})
Story points: 2