{ "id": "91403", "key": "TIMOB-9102", "fields": { "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false }, "project": { "id": "10153", "key": "TIMOB", "name": "Titanium SDK/CLI", "projectCategory": { "id": "10100", "description": "Titanium and related SDKs used in application development", "name": "Client" } }, "fixVersions": [ { "id": "16593", "description": "Release 4.0.0", "name": "Release 4.0.0", "archived": false, "released": true, "releaseDate": "2015-05-21" } ], "resolution": { "id": "1", "description": "A fix for this issue is checked into the tree and tested.", "name": "Fixed" }, "resolutiondate": "2015-03-05T21:13:44.000+0000", "created": "2012-05-06T01:45:04.000+0000", "priority": { "name": "Medium", "id": "3" }, "labels": [ "api", "qe-4.0.0", "supportTeam" ], "versions": [ { "id": "13271", "description": "Release 2.1.0", "name": "Release 2.1.0", "archived": false, "released": true, "releaseDate": "2012-06-29" }, { "id": "13272", "description": "Release 2.0.1", "name": "Release 2.0.1", "archived": true, "released": true, "releaseDate": "2012-04-16" }, { "id": "14162", "description": "Release 3.1.0", "name": "Release 3.1.0", "archived": true, "released": true, "releaseDate": "2013-04-16" }, { "id": "14982", "description": "Release 3.2.0", "name": "Release 3.2.0", "archived": false, "released": true, "releaseDate": "2013-12-19" } ], "issuelinks": [ { "id": "17222", "type": { "id": "10001", "name": "Cloners", "inward": "is cloned into", "outward": "is cloned from" }, "inwardIssue": { "id": "91727", "key": "TIMOB-9104", "fields": { "summary": "Android: getVisible() / getEnabled() functions could return null value", "status": { "description": "The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.", "name": "Closed", "id": "6", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "priority": { "name": "Medium", "id": "3" }, "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false } } } } ], "assignee": { "name": "penrique", "key": "penrique", "displayName": "Pedro Enrique", "active": false, "timeZone": "America/Los_Angeles" }, "updated": "2015-03-18T21:43:49.000+0000", "status": { "description": "The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.", "name": "Closed", "id": "6", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "components": [ { "id": "10206", "name": "iOS", "description": "iOS Platform" } ], "description": "h2. Problem description\r\nBoolean functions like getVisible() or getEnabled() can return null value\r\n\r\nh2. Code sample\r\n\r\n{code}\r\nvar win = Ti.UI.createWindow({\r\n\texitOnClose:true\r\n});\r\nvar view = Ti.UI.createView({\r\n\ttop:0,\r\n\tleft:0,\r\n\twidth: 10, \r\n\theight:10\r\n});\r\n\r\nvar button = Ti.UI.createButton({\r\n\ttitle:'Click Me!'\r\n});\r\n\r\nbutton.addEventListener('click', function(e) { \r\n\talert(view.getVisible());\r\n\tview.setVisible(!view.getVisible()); \r\n});\r\n\r\n\r\nwin.add(button);\r\nwin.add(view);\r\n\r\nwin.open();\r\n{code}\r\n\r\nResult: After running the sample code, click on the button to execute view.getVisible(), which return value 'null'.\r\nExpected result: If the property was never defined by the user, then the default value should be returned. \r\n", "attachment": [], "flagged": false, "summary": "iOS: getVisible() / getEnabled() functions could return null value", "creator": { "name": "arkainrdk", "key": "arkainrdk", "displayName": "Ranando King", "active": true, "timeZone": "America/Chicago" }, "subtasks": [], "reporter": { "name": "fcasali", "key": "fcasali", "displayName": "Federico Casali", "active": true, "timeZone": "America/Los_Angeles" }, "environment": "TiSDK tested: 2.0.1 and 2.1.0 latest CI\r\niOS (also reproducible on Android)", "closedSprints": [ { "id": 356, "state": "closed", "name": "2015 Sprint 05 SDK", "startDate": "2015-02-28T15:50:08.527Z", "endDate": "2015-03-14T00:00:00.000Z", "completeDate": "2015-03-14T13:54:50.695Z", "originBoardId": 114 }, { "id": 330, "state": "closed", "name": "2015 Sprint 03 SDK", "startDate": "2015-01-31T01:00:05.245Z", "endDate": "2015-02-14T01:00:00.000Z", "completeDate": "2015-02-16T21:01:51.914Z", "originBoardId": 114 } ], "comment": { "comments": [ { "id": "247260", "author": { "name": "jithinv@exalture.com", "key": "jithinv@exalture.com", "displayName": "jithinpv", "active": true, "timeZone": "America/Los_Angeles" }, "body": "view.getVisible() returns undefined.\n\n\nIssue reproduces \n\nTested with\n\nTitanium Studio, build: 3.0.1.201212181159\nTitanium SDK version: 3.1.0 \nTitanium SDK version: 3.0.2 \niOS iPhone Simulator: iOS SDK version: 6.0\n", "updateAuthor": { "name": "jithinv@exalture.com", "key": "jithinv@exalture.com", "displayName": "jithinpv", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2013-04-12T10:00:28.000+0000", "updated": "2013-04-12T10:00:28.000+0000" }, { "id": "342844", "author": { "name": "penrique", "key": "penrique", "displayName": "Pedro Enrique", "active": false, "timeZone": "America/Los_Angeles" }, "body": "Some quick unit tests\r\n{code}\r\nvar win = Ti.UI.createWindow({\r\n\tbackgroundColor: '#ccc'\r\n});\r\n\r\nvar button1 = Ti.UI.createButton({\r\n\ttop: 0, height: 10, width: 100\r\n});\r\nvar slider = Ti.UI.createSlider({\r\n\ttop: 0, height: 10, width: 100\r\n});\r\nvar _switch = Ti.UI.createSwitch({\r\n\ttop: 0, height: 10, width: 100\r\n});\r\nvar textArea = Ti.UI.createTextArea({\r\n\ttop: 0, height: 10, width: 100\r\n});\r\nvar textField = Ti.UI.createTextField({\r\n\ttop: 0, height: 10, width: 100\r\n});\r\nvar view = Ti.UI.createView({\r\n\ttop: 0, height: 10, width: 100\r\n});\r\n \r\nvar button2 = Ti.UI.createButton({\r\n\ttitle:'Click Me!',\r\n\tbottom: 10\r\n});\r\n\r\nwin.add(button1);\r\nwin.add(slider);\r\nwin.add(_switch);\r\nwin.add(textArea);\r\nwin.add(textField);\r\nwin.add(button2);\r\nwin.add(view);\r\nwin.open();\r\n \r\nfunction assert(what, actual, expected) {\r\n\tTi.API.info(what + ' should be \"' + expected + '\" actual is \"' + actual + '\"');\r\n\tif(actual != expected) {\r\n\t\tthrow new Error(what + ' expected to be \"' + expected + '\" but was \"' + actual + '\"');\r\n\t}\r\n}\r\n\r\nbutton2.addEventListener('click', function(e) { \r\n\tTi.API.info('==============================');\r\n\tassert('button1.enabled', button1.enabled, true);\r\n\tassert('slider.enabled', slider.enabled, true);\r\n\tassert('_switch.enabled', _switch.enabled, true);\r\n\tassert('textArea.enabled', textArea.enabled, true);\r\n\tassert('textField.enabled', textField.enabled, true);\r\n\tassert('view.visible', view.visible, true);\r\n\tTi.API.info('==============================');\r\n\tbutton1.enabled = !button1.enabled;\r\n\tslider.enabled = !slider.enabled;\r\n\t_switch.enabled = !_switch.enabled;\r\n\ttextArea.enabled = !textArea.enabled;\r\n\ttextField.enabled = !textField.enabled;\r\n\tview.visible = !view.visible;\r\n\tTi.API.info('==============================');\r\n\tassert('button1.enabled', button1.enabled, false);\r\n\tassert('slider.enabled', slider.enabled, false);\r\n\tassert('_switch.enabled', _switch.enabled, false);\r\n\tassert('textArea.enabled', textArea.enabled, false);\r\n\tassert('textField.enabled', textField.enabled, false);\r\n\tassert('view.visible', view.visible, false);\r\n\tTi.API.info('==============================');\r\n\tTi.API.info('');\r\n\tTi.API.info('==============================');\r\n\tassert('button1.getEnabled()', button1.getEnabled(), false);\r\n\tassert('slider.getEnabled()', slider.getEnabled(), false);\r\n\tassert('_switch.getEnabled()', _switch.getEnabled(), false);\r\n\tassert('textArea.getEnabled()', textArea.getEnabled(), false);\r\n\tassert('textField.getEnabled()', textField.getEnabled(), false);\r\n\tassert('view.getVisible()', view.getVisible(), false);\r\n\tTi.API.info('==============================');\r\n\tbutton1.setEnabled(!button1.getEnabled());\r\n\tslider.setEnabled(!slider.getEnabled());\r\n\t_switch.setEnabled(!_switch.getEnabled());\r\n\ttextArea.setEnabled(!textArea.getEnabled());\r\n\ttextField.setEnabled(!textField.getEnabled());\r\n\tview.setVisible(!view.getVisible());\r\n\tassert('button1.getEnabled()', button1.getEnabled(), true);\r\n\tassert('slider.getEnabled()', slider.getEnabled(), true);\r\n\tassert('_switch.getEnabled()', _switch.getEnabled(), true);\r\n\tassert('textArea.getEnabled()', textArea.getEnabled(), true);\r\n\tassert('textField.getEnabled()', textField.getEnabled(), true);\r\n\tassert('view.getVisible()', view.getVisible(), true);\r\n\tTi.API.info('==============================');\r\n});\r\n{code}", "updateAuthor": { "name": "penrique", "key": "penrique", "displayName": "Pedro Enrique", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2015-02-10T22:07:40.000+0000", "updated": "2015-02-10T22:29:11.000+0000" }, { "id": "342850", "author": { "name": "penrique", "key": "penrique", "displayName": "Pedro Enrique", "active": false, "timeZone": "America/Los_Angeles" }, "body": "PR https://github.com/appcelerator/titanium_mobile/pull/6634", "updateAuthor": { "name": "penrique", "key": "penrique", "displayName": "Pedro Enrique", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2015-02-10T22:30:52.000+0000", "updated": "2015-02-10T22:30:52.000+0000" }, { "id": "342861", "author": { "name": "penrique", "key": "penrique", "displayName": "Pedro Enrique", "active": false, "timeZone": "America/Los_Angeles" }, "body": "Ignore my last comment.\r\n\r\nPR: https://github.com/appcelerator/titanium_mobile/pull/6635", "updateAuthor": { "name": "penrique", "key": "penrique", "displayName": "Pedro Enrique", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2015-02-10T23:11:40.000+0000", "updated": "2015-02-10T23:11:40.000+0000" }, { "id": "344300", "author": { "name": "kagrawal", "key": "kagrawal", "displayName": "Khushbu Agrawal", "active": true, "timeZone": "Asia/Shanghai" }, "body": "Verified the fix with below Test Environment. \r\n\r\nAppc Studio : 4.0.0.201502171827\r\nTi SDK : 4.0.0.v20150224141439 \r\nMac OSX : 10.10.1 \r\nAlloy : 1.5.1 \r\nCLI - 3.6.0-dev \r\nCode Processor: 1.1.1 \r\niPhone 6+: iOS 8.1\r\n\r\nconsole.log(\"Visible property value\", + view.getVisible());\r\n\r\nview.getVisible() method works fine.If the user hasn't assigned any value to visible property then it returns default value (1).\r\n\r\nconsole.log(\"Enabled property value\", + view.getEnabled());\r\n//Enabled property value NaN\r\n\r\nview.getEnabled() method doesn't work as expected.If the user hasn't assigned any value to enabled property then it returns NaN as default value which is unexpected.\r\n\r\nSo Reopening this ticket.\r\n\r\n", "updateAuthor": { "name": "kagrawal", "key": "kagrawal", "displayName": "Khushbu Agrawal", "active": true, "timeZone": "Asia/Shanghai" }, "created": "2015-02-25T08:57:14.000+0000", "updated": "2015-02-25T09:07:52.000+0000" }, { "id": "344509", "author": { "name": "ingo", "key": "ingo", "displayName": "Ingo Muschenetz", "active": true, "timeZone": "America/Los_Angeles" }, "body": "[~emerriman] to review.", "updateAuthor": { "name": "ingo", "key": "ingo", "displayName": "Ingo Muschenetz", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2015-02-27T00:36:17.000+0000", "updated": "2015-02-27T00:36:17.000+0000" }, { "id": "344578", "author": { "name": "ewieber", "key": "ewieber", "displayName": "Eric Wieber", "active": false, "timeZone": "America/Los_Angeles" }, "body": "I see the same as Khushbu reported, using:\r\n\r\nTitanium SDK 4.0.0.v20150227065820\r\nStudio 3.4.2.201502181619\r\nCLI 3.4.2-alpha\r\nXcode 6.2b5\r\nOn iPhone 6 and iPhone 6 sim.\r\n\r\nThe unit test above is returning correct values, but it fails to cover the case of checking getEnabled() before setting the enabled property to a value.\r\nWhen calling getEnabled() before setting the enabled property, I see a return value of 'undefined'. Should be 'true', the default.", "updateAuthor": { "name": "ewieber", "key": "ewieber", "displayName": "Eric Wieber", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2015-02-27T16:57:31.000+0000", "updated": "2015-02-27T16:57:31.000+0000" }, { "id": "345208", "author": { "name": "vduggal", "key": "vduggal", "displayName": "Vishal Duggal", "active": false, "timeZone": "America/Los_Angeles" }, "body": "enabled is not a property supported on the base View object on iOS platform. So it return undefined", "updateAuthor": { "name": "vduggal", "key": "vduggal", "displayName": "Vishal Duggal", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2015-03-05T21:13:44.000+0000", "updated": "2015-03-05T21:13:44.000+0000" }, { "id": "346445", "author": { "name": "ewieber", "key": "ewieber", "displayName": "Eric Wieber", "active": false, "timeZone": "America/Los_Angeles" }, "body": "Ah, you're right Vishal. In light of that:\r\nVerified fixed using:\r\n\r\nTitanium SDK 4.0.0.v20150317234215\r\nStudio 4.0.0.201503171723\r\nCLI 3.4.2\r\nXcode 6.2\r\nNode 0.12\r\n\r\nOn: \r\niPhone 6, iOS 8.2\r\niPad Air 2, iOS 8.2", "updateAuthor": { "name": "ewieber", "key": "ewieber", "displayName": "Eric Wieber", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2015-03-18T21:43:49.000+0000", "updated": "2015-03-18T21:43:49.000+0000" } ], "maxResults": 10, "total": 10, "startAt": 0 } } }