{ "id": "170756", "key": "TIMOB-25656", "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": "20060", "description": "", "name": "Release 7.0.2", "archived": false, "released": true, "releaseDate": "2018-02-09" } ], "resolution": { "id": "1", "description": "A fix for this issue is checked into the tree and tested.", "name": "Fixed" }, "resolutiondate": "2018-01-25T16:22:35.000+0000", "created": "2018-01-09T11:16:35.000+0000", "priority": { "name": "Critical", "id": "1" }, "labels": [ "Android", "development", "module" ], "versions": [ { "id": "17609", "description": "", "name": "Release 7.0.0", "archived": false, "released": true, "releaseDate": "2017-12-07" } ], "issuelinks": [ { "id": "56250", "type": { "id": "10002", "name": "Duplicate", "inward": "is duplicated by", "outward": "duplicates" }, "inwardIssue": { "id": "170586", "key": "TIMOB-25600", "fields": { "summary": "Android : SDK 7.0.0.GA not applying custom theme attributes properly on TableViewRow, but SDK 5.5.1 or below works properly", "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": "Critical", "id": "1" }, "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false } } } }, { "id": "56256", "type": { "id": "10002", "name": "Duplicate", "inward": "is duplicated by", "outward": "duplicates" }, "inwardIssue": { "id": "170764", "key": "TIMOB-25658", "fields": { "summary": "TableView NullPointerException on getOuterView Titanium 7.0.1 Android", "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": "Critical", "id": "1" }, "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false } } } }, { "id": "56262", "type": { "id": "10002", "name": "Duplicate", "inward": "is duplicated by", "outward": "duplicates" }, "inwardIssue": { "id": "170904", "key": "TIMOB-25691", "fields": { "summary": "Nullpointer Exception with ListViews on Android (SDK 7.0.1)", "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": "None", "id": "6" }, "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false } } } }, { "id": "56273", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "inwardIssue": { "id": "169668", "key": "TIMOB-25728", "fields": { "summary": "Android: TableView can crash using setData()", "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": "Critical", "id": "1" }, "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false } } } } ], "assignee": { "name": "gmathews", "key": "gmathews", "displayName": "Gary Mathews", "active": true, "timeZone": "America/Los_Angeles" }, "updated": "2018-01-26T19:11:27.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": "10202", "name": "Android", "description": "Android Platform" } ], "description": "Before 7.0.0 \"TiViewProxy.getOrCreateView()\" never returned \"null\". Now it does.\r\n\r\n[Breaking commit|https://github.com/appcelerator/titanium_mobile/commit/58ffbd5147faa90259d805957ab8957c7a84b912#diff-bec22e2efdd8b352a7754ea42f435dc7R487]\r\n\r\nIn attached example I use DrawerLayout, but problem can appear in every module which use \"getOrCreateView()\" without checking result for \"null\".", "attachment": [ { "id": "63928", "filename": "-.txt", "author": { "name": "s.volkov", "key": "s.volkov", "displayName": "Sergey Volkov", "active": true, "timeZone": "Europe/Moscow" }, "created": "2018-01-09T11:24:08.000+0000", "size": 8272, "mimeType": "text/plain" }, { "id": "63927", "filename": "app.js", "author": { "name": "s.volkov", "key": "s.volkov", "displayName": "Sergey Volkov", "active": true, "timeZone": "Europe/Moscow" }, "created": "2018-01-09T11:09:10.000+0000", "size": 1981, "mimeType": "application/javascript" } ], "flagged": false, "summary": "Android. TiViewProxy.getOrCreateView returns null on Titanium 7.0.0+", "creator": { "name": "s.volkov", "key": "s.volkov", "displayName": "Sergey Volkov", "active": true, "timeZone": "Europe/Moscow" }, "subtasks": [], "reporter": { "name": "s.volkov", "key": "s.volkov", "displayName": "Sergey Volkov", "active": true, "timeZone": "Europe/Moscow" }, "environment": "SDK 7.0.1", "closedSprints": [ { "id": 985, "state": "closed", "name": "2018 Sprint 01 SDK", "startDate": "2017-12-31T16:58:54.631Z", "endDate": "2018-01-14T16:58:00.000Z", "completeDate": "2018-01-17T22:44:27.028Z", "originBoardId": 114 }, { "id": 990, "state": "closed", "name": "2018 Sprint 02 SDK", "startDate": "2018-01-14T22:48:43.544Z", "endDate": "2018-01-28T22:48:00.000Z", "completeDate": "2018-01-29T16:22:42.911Z", "originBoardId": 114 } ], "comment": { "comments": [ { "id": "432903", "author": { "name": "s.volkov", "key": "s.volkov", "displayName": "Sergey Volkov", "active": true, "timeZone": "Europe/Moscow" }, "body": " [^-.txt] From https://ti-slack.slack.com/files/U06V3AS8Y/F8LPGH1KQ/-.txt", "updateAuthor": { "name": "s.volkov", "key": "s.volkov", "displayName": "Sergey Volkov", "active": true, "timeZone": "Europe/Moscow" }, "created": "2018-01-09T11:26:22.000+0000", "updated": "2018-01-09T11:26:22.000+0000" }, { "id": "432922", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "Hey [~s.volkov], thanks for reporting! 7.0.0 was a major release with many breaking changes as described in [semantic versioning|https://semver.org/]. Anyway, I don't think this was planned, so I'll move the ticket to have it investigated by the Android team to provide you an alternative. Thanks!", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2018-01-09T16:29:14.000+0000", "updated": "2018-01-09T16:29:14.000+0000" }, { "id": "432931", "author": { "name": "jquick", "key": "jquick", "displayName": "Joshua Quick", "active": true, "timeZone": "America/Los_Angeles" }, "body": "[~s.volkov], this was done on purpose. It'll only return null if the parent activity was destroyed or was never assigned. This is typically the case when the proxy's view has been released after its parent activity has been destroyed (via the back-button). Once the activity has been destroyed, we cannot create another view since the activity context has been destroyed or else this will lead to other problems (ie: where it's crashing now used to be using destroyed activity contexts).\r\n\r\nThe real issue here is there are place in the code that is missing null checks after an activity has been destroyed. Particularly in handleMessage() method calls which can get invoked by a view/activity/proxy after all UI elements have been released (not a Titanium issue; this is how it works for all native Android developers).\r\n\r\nThanks for the stack-trace. We'll use that to fix that specific issue.", "updateAuthor": { "name": "jquick", "key": "jquick", "displayName": "Joshua Quick", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2018-01-09T19:02:42.000+0000", "updated": "2018-01-09T19:02:42.000+0000" }, { "id": "432961", "author": { "name": "s.volkov", "key": "s.volkov", "displayName": "Sergey Volkov", "active": true, "timeZone": "Europe/Moscow" }, "body": "In example I create proxies while _win2_ is opened, but I don't attach them to _win2_, so no views really created. After _win2_ is closed and this proxies become useless, because activity from _win2_ is destroyed.\r\nMaybe we should not assign activity to proxy, before its view created (and use TiApplication.getCurrentActivity() while actual activity not assigned)?\r\n\r\nP.S. This issue was opened after [this|https://github.com/manumaticx/Ti.DrawerLayout/issues/88] in original Ti.DrawerLayout module.", "updateAuthor": { "name": "s.volkov", "key": "s.volkov", "displayName": "Sergey Volkov", "active": true, "timeZone": "Europe/Moscow" }, "created": "2018-01-10T09:29:14.000+0000", "updated": "2018-01-10T09:29:14.000+0000" }, { "id": "432964", "author": { "name": "s.volkov", "key": "s.volkov", "displayName": "Sergey Volkov", "active": true, "timeZone": "Europe/Moscow" }, "body": "To be clear, [stack trace (-.txt)|^-.txt] is not from [example (app.js) | ^app.js] .", "updateAuthor": { "name": "s.volkov", "key": "s.volkov", "displayName": "Sergey Volkov", "active": true, "timeZone": "Europe/Moscow" }, "created": "2018-01-10T09:42:33.000+0000", "updated": "2018-01-10T09:42:33.000+0000" }, { "id": "432989", "author": { "name": "jquick", "key": "jquick", "displayName": "Joshua Quick", "active": true, "timeZone": "America/Los_Angeles" }, "body": "[~s.volkov],\r\n\r\nThe specific issue here is that the proxy was created and assigned win2's activity (because it was the top-most activity at the time), but the proxy wasn't used and attempted to create its view until after win'2 activity was destroyed (which it still references). Before our code change, it would have created its view based on the destroyed activity, which you can do but there is a high risk of running into illegal-state exceptions. We'll look into an alternative solution.\r\n\r\nFor now, you can work-around this by creating these views at launch. This will work because the root activity which shows the splash screen exists for the lifetime of the JavaScript runtime. Alternatively, create these views during the window's \"open\" event for the window they're intended to be displayed in (less convenient to code, but it'll work).", "updateAuthor": { "name": "jquick", "key": "jquick", "displayName": "Joshua Quick", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2018-01-10T19:34:10.000+0000", "updated": "2018-01-10T19:34:10.000+0000" }, { "id": "433045", "author": { "name": "gmathews", "key": "gmathews", "displayName": "Gary Mathews", "active": true, "timeZone": "America/Los_Angeles" }, "body": "master: https://github.com/appcelerator/titanium_mobile/pull/9721", "updateAuthor": { "name": "gmathews", "key": "gmathews", "displayName": "Gary Mathews", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2018-01-11T19:09:54.000+0000", "updated": "2018-01-11T19:09:54.000+0000" }, { "id": "433093", "author": { "name": "lchoudhary", "key": "lchoudhary", "displayName": "Lokesh Choudhary", "active": true, "timeZone": "America/Los_Angeles" }, "body": "[~gmathews], Can you please provide a backport.", "updateAuthor": { "name": "lchoudhary", "key": "lchoudhary", "displayName": "Lokesh Choudhary", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2018-01-12T18:34:58.000+0000", "updated": "2018-01-12T18:34:58.000+0000" }, { "id": "433094", "author": { "name": "lchoudhary", "key": "lchoudhary", "displayName": "Lokesh Choudhary", "active": true, "timeZone": "America/Los_Angeles" }, "body": "-FR Passed for master. Waiting for merge to get enabled.-\r\nFound some issues.", "updateAuthor": { "name": "lchoudhary", "key": "lchoudhary", "displayName": "Lokesh Choudhary", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2018-01-12T18:35:18.000+0000", "updated": "2018-01-12T19:59:58.000+0000" }, { "id": "433268", "author": { "name": "gmathews", "key": "gmathews", "displayName": "Gary Mathews", "active": true, "timeZone": "America/Los_Angeles" }, "body": "7_0_X: https://github.com/appcelerator/titanium_mobile/pull/9743", "updateAuthor": { "name": "gmathews", "key": "gmathews", "displayName": "Gary Mathews", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2018-01-17T18:38:47.000+0000", "updated": "2018-01-17T18:38:47.000+0000" }, { "id": "433282", "author": { "name": "lchoudhary", "key": "lchoudhary", "displayName": "Lokesh Choudhary", "active": true, "timeZone": "America/Los_Angeles" }, "body": "Found issues in Backport.", "updateAuthor": { "name": "lchoudhary", "key": "lchoudhary", "displayName": "Lokesh Choudhary", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2018-01-18T00:03:03.000+0000", "updated": "2018-01-18T00:03:03.000+0000" }, { "id": "433554", "author": { "name": "lchoudhary", "key": "lchoudhary", "displayName": "Lokesh Choudhary", "active": true, "timeZone": "America/Los_Angeles" }, "body": "FR passed for backport.\r\nWaiting for merge to become enabled.", "updateAuthor": { "name": "lchoudhary", "key": "lchoudhary", "displayName": "Lokesh Choudhary", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2018-01-23T23:57:00.000+0000", "updated": "2018-01-23T23:57:00.000+0000" }, { "id": "433558", "author": { "name": "lchoudhary", "key": "lchoudhary", "displayName": "Lokesh Choudhary", "active": true, "timeZone": "America/Los_Angeles" }, "body": "Backport PR merged.", "updateAuthor": { "name": "lchoudhary", "key": "lchoudhary", "displayName": "Lokesh Choudhary", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2018-01-24T00:59:16.000+0000", "updated": "2018-01-24T00:59:16.000+0000" }, { "id": "433667", "author": { "name": "lchoudhary", "key": "lchoudhary", "displayName": "Lokesh Choudhary", "active": true, "timeZone": "America/Los_Angeles" }, "body": "Master PR merged.", "updateAuthor": { "name": "lchoudhary", "key": "lchoudhary", "displayName": "Lokesh Choudhary", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2018-01-25T16:22:30.000+0000", "updated": "2018-01-25T16:22:30.000+0000" }, { "id": "433677", "author": { "name": "lchoudhary", "key": "lchoudhary", "displayName": "Lokesh Choudhary", "active": true, "timeZone": "America/Los_Angeles" }, "body": "Verified the fix with SDK 7.1.0.v20180125082515 & 7.1.0.v20180125082515.\r\n\r\nClosing.\r\n\r\nStudio Ver: 5.0.0.201712081732\r\nOS Ver: 10.13.2\r\nXcode Ver: Xcode 9.2\r\nAppc NPM: 4.2.11\r\nAppc CLI: 7.0.1\r\nDaemon Ver: 1.0.1\r\nTi CLI Ver: 5.0.14\r\nAlloy Ver: 1.10.10\r\nNode Ver: 8.9.1\r\nNPM Ver: 5.5.1\r\nJava Ver: 1.8.0_101\r\nDevices: ⇨ samsung SM-G955U1 --- Android 7.0\r\n ⇨ google Nexus 5 --- Android 6.0.1\r\nEmulator: android 8.0\r\n", "updateAuthor": { "name": "lchoudhary", "key": "lchoudhary", "displayName": "Lokesh Choudhary", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2018-01-25T18:18:16.000+0000", "updated": "2018-01-25T18:18:16.000+0000" } ], "maxResults": 16, "total": 16, "startAt": 0 } } }