{ "id": "174617", "key": "TIMOB-27711", "fields": { "issuetype": { "id": "7", "description": "gh.issue.story.desc", "name": "Story", "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": "20950", "name": "Release 9.1.0", "archived": false, "released": true, "releaseDate": "2020-08-25" } ], "resolution": { "id": "1", "description": "A fix for this issue is checked into the tree and tested.", "name": "Fixed" }, "resolutiondate": "2020-08-25T00:39:14.000+0000", "created": "2020-01-08T15:40:38.000+0000", "priority": { "name": "High", "id": "2" }, "labels": [ "engSchedule" ], "versions": [], "issuelinks": [ { "id": "58069", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "outwardIssue": { "id": "174615", "key": "TIMOB-27710", "fields": { "summary": "TiAPI: Support optional callback functions for async methods that typically fire events", "status": { "description": "The issue is open and ready for the assignee to start work on it.", "name": "Open", "id": "1", "statusCategory": { "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do" } }, "priority": { "name": "High", "id": "2" }, "issuetype": { "id": "7", "description": "gh.issue.story.desc", "name": "Story", "subtask": false } } } }, { "id": "59172", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "outwardIssue": { "id": "176035", "key": "TIMOB-28340", "fields": { "summary": "TiAPI: Return Promise for Ti.UI.Window open() and close()", "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": "High", "id": "2" }, "issuetype": { "id": "7", "description": "gh.issue.story.desc", "name": "Story", "subtask": false } } } }, { "id": "58078", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "outwardIssue": { "id": "171872", "key": "TIMOB-26176", "fields": { "summary": "Android: Opening/Closing a dialog should fire a window's blur/focus events (parity)", "status": { "description": "The issue is open and ready for the assignee to start work on it.", "name": "Open", "id": "1", "statusCategory": { "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do" } }, "priority": { "name": "Low", "id": "4" }, "issuetype": { "id": "4", "description": "An improvement or enhancement to an existing feature or task.", "name": "Improvement", "subtask": false } } } } ], "assignee": { "name": "cwilliams", "key": "cwilliams", "displayName": "Christopher Williams", "active": true, "timeZone": "America/New_York" }, "updated": "2021-02-08T18:58:38.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": "10224", "name": "TiAPI", "description": "This component is used for cross-platform API work. Specifications are most likely to use this component." } ], "description": "This is a glaring issue when we look at our test suite and see the common {{before}} hooks we've written to clean up open windows/etc.\r\n\r\nWe have no means of telling if a Window is closed or open. So instead we fire off a 3-second {{setTimeout}} fallback to handle the \"isClosed\" case, and then hang an event listener for the close event and try to close the window. So in the case where the test never opened the window (or already closed it), we basically do nothing for 3 seconds and assume since the {{close}} event never fired that it must have been closed.\r\n\r\nWe have {{Ti.UI.View.visible}} which should tell us if a view is hidden or visible.\r\n\r\nProposed APIs:\r\n{{Ti.UI.Window.closed}} - {{boolean}}, {{true}} or {{false}} \r\n* tells us if the window is closed (do we need {{opened}} equivalent? I assume they'd just be inversions of one another)\r\n* Potential alternates? {{isClosed}}, {{closed}}, {{opened}}, {{isOpened}} (properties versus methods?)\r\n * Note that JavaFX uses {{showing}} as a roughly equivalent API here: https://openjfx.io/javadoc/13/javafx.graphics/javafx/stage/Window.html\r\n * Android equivalent may be {{isActive}}? https://developer.android.com/reference/android/view/Window.html#isActive()\r\n\r\n{{Ti.UI.View.focused}} - {{boolean}}, {{true}} or {{false}}\r\n* Potential alternates? {{isFocused}}, {{hasFocus}} (properties versus methods?)\r\n * https://developer.android.com/reference/android/view/View#hasFocus()", "attachment": [], "flagged": false, "summary": "TiAPI: Add state querying methods to UI components", "creator": { "name": "cwilliams", "key": "cwilliams", "displayName": "Christopher Williams", "active": true, "timeZone": "America/New_York" }, "subtasks": [], "reporter": { "name": "cwilliams", "key": "cwilliams", "displayName": "Christopher Williams", "active": true, "timeZone": "America/New_York" }, "environment": null, "closedSprints": [ { "id": 1201, "state": "closed", "name": "2020 Sprint 14", "startDate": "2020-07-06T15:40:00.000Z", "endDate": "2020-07-17T15:40:00.000Z", "completeDate": "2020-07-20T22:16:28.367Z", "originBoardId": 114 }, { "id": 1176, "state": "closed", "name": "2020 Sprint 1", "startDate": "2020-01-02T21:15:56.301Z", "endDate": "2020-01-17T21:15:00.000Z", "completeDate": "2020-01-21T17:44:29.577Z", "originBoardId": 114 }, { "id": 1177, "state": "closed", "name": "2020 Sprint 2", "startDate": "2020-01-20T17:44:37.733Z", "endDate": "2020-01-31T17:44:00.000Z", "completeDate": "2020-01-31T16:57:44.689Z", "originBoardId": 114 }, { "id": 1194, "state": "closed", "name": "2020 Sprint 9", "startDate": "2020-04-24T17:09:51.572Z", "endDate": "2020-05-08T17:09:00.000Z", "completeDate": "2020-05-08T15:40:07.869Z", "originBoardId": 114 }, { "id": 1179, "state": "closed", "name": "2020 Sprint 3", "startDate": "2020-02-03T16:58:00.000Z", "endDate": "2020-02-14T16:58:00.000Z", "completeDate": "2020-02-17T09:45:06.128Z", "originBoardId": 114 }, { "id": 1195, "state": "closed", "name": "2020 Sprint 10", "startDate": "2020-05-08T16:37:58.282Z", "endDate": "2020-05-22T16:37:00.000Z", "completeDate": "2020-05-21T15:26:11.089Z", "originBoardId": 114 }, { "id": 1196, "state": "closed", "name": "2020 Sprint 11", "startDate": "2020-05-26T15:56:00.000Z", "endDate": "2020-06-05T15:56:00.000Z", "completeDate": "2020-06-08T21:05:50.356Z", "originBoardId": 114 }, { "id": 1198, "state": "closed", "name": "2020 Sprint 12", "startDate": "2020-06-08T21:06:41.849Z", "endDate": "2020-06-19T21:06:00.000Z", "completeDate": "2020-06-19T15:54:38.493Z", "originBoardId": 114 }, { "id": 1199, "state": "closed", "name": "2020 Sprint 13", "startDate": "2020-06-19T16:41:04.099Z", "endDate": "2020-07-02T16:41:00.000Z", "completeDate": "2020-07-02T15:37:12.455Z", "originBoardId": 114 } ], "comment": { "comments": [ { "id": "453704", "author": { "name": "cwilliams", "key": "cwilliams", "displayName": "Christopher Williams", "active": true, "timeZone": "America/New_York" }, "body": "https://github.com/appcelerator/titanium_mobile/pull/11433", "updateAuthor": { "name": "cwilliams", "key": "cwilliams", "displayName": "Christopher Williams", "active": true, "timeZone": "America/New_York" }, "created": "2020-01-14T19:48:03.000+0000", "updated": "2020-01-14T19:48:03.000+0000" }, { "id": "453708", "author": { "name": "jquick", "key": "jquick", "displayName": "Joshua Quick", "active": true, "timeZone": "America/Los_Angeles" }, "body": "[~cwilliams], we should define what the focus behavior should be for a window when a dialog is displayed. Currently there is a parity issue as noted here: [TIMOB-26176]\r\n\r\nIn my opinion, I agree with iOS' behavior. Window \"focus\" should be lost when a dialog appears. The dialog gets the \"focus\" instead and will receive user-input.", "updateAuthor": { "name": "jquick", "key": "jquick", "displayName": "Joshua Quick", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2020-01-14T21:55:52.000+0000", "updated": "2020-01-14T21:55:52.000+0000" }, { "id": "455909", "author": { "name": "cwilliams", "key": "cwilliams", "displayName": "Christopher Williams", "active": true, "timeZone": "America/New_York" }, "body": "Merged to master for 9.1.0 target", "updateAuthor": { "name": "cwilliams", "key": "cwilliams", "displayName": "Christopher Williams", "active": true, "timeZone": "America/New_York" }, "created": "2020-06-22T18:24:15.000+0000", "updated": "2020-06-22T18:24:15.000+0000" } ], "maxResults": 3, "total": 3, "startAt": 0 } } }