{ "id": "167122", "key": "TIMOB-24582", "fields": { "issuetype": { "id": "2", "description": "A new feature of the product, which has yet to be developed.", "name": "New Feature", "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": "19882", "name": "Release 8.0.0", "archived": false, "released": true, "releaseDate": "2019-03-14" } ], "resolution": { "id": "10000", "description": "", "name": "Done" }, "resolutiondate": "2019-01-11T02:17:29.000+0000", "created": "2017-04-16T18:32:58.000+0000", "priority": { "name": "High", "id": "2" }, "labels": [ "NavigationWindow", "android", "parity" ], "versions": [], "issuelinks": [ { "id": "56159", "type": { "id": "10001", "name": "Cloners", "inward": "is cloned into", "outward": "is cloned from" }, "inwardIssue": { "id": "170384", "key": "TIMOB-25537", "fields": { "summary": "Windows: Navigation parity for a cross-platform Ti.UI.NavigationWindow", "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": "2", "description": "A new feature of the product, which has yet to be developed.", "name": "New Feature", "subtask": false } } } }, { "id": "56547", "type": { "id": "10001", "name": "Cloners", "inward": "is cloned into", "outward": "is cloned from" }, "inwardIssue": { "id": "171681", "key": "TIMOB-26060", "fields": { "summary": "iOS: Move iOS-only Ti.UI.iOS.NavigationWindow to cross-platform Ti.UI.NavigationWindow", "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": "Low", "id": "4" }, "issuetype": { "id": "4", "description": "An improvement or enhancement to an existing feature or task.", "name": "Improvement", "subtask": false } } } }, { "id": "56612", "type": { "id": "10020", "name": "Depends", "inward": "is dependent of", "outward": "depends on" }, "inwardIssue": { "id": "171787", "key": "ALOY-1621", "fields": { "summary": "Move NavigationWindow API from Ti.UI.iOS to Ti.UI (parity)", "status": { "description": "A resolution has been taken, and it is awaiting verification by reporter. From here issues are either reopened, or are closed.", "name": "Resolved", "id": "5", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "priority": { "name": "Critical", "id": "1" }, "issuetype": { "id": "4", "description": "An improvement or enhancement to an existing feature or task.", "name": "Improvement", "subtask": false } } } } ], "assignee": { "name": "gmathews", "key": "gmathews", "displayName": "Gary Mathews", "active": true, "timeZone": "America/Los_Angeles" }, "updated": "2019-01-11T02:17:32.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": "On iOS, we have the {{Ti.UI.iOS.NavigationWindow}} to handle a stack of windows that can be opened and closed. Unfortunately, on Android and Windows, we have to do that manually and it required the (Alloy) developer to either write custom (per platform) logic or use plugins like [xp.ui|https://github.com/FokkeZB/UTiL/blob/master/app/lib/xp.ui.js].\r\n\r\nProposed API-changes:\r\n* iOS: Deprecate {{Ti.UI.iOS.NavigationWindow}} in favor of {{Ti.UI.NavigationWindow}}\r\n* Android / Windows: Support NavigationWindow, add the native [back button|https://developer.android.com/training/implementing-navigation/temporal.html]\r\n* Android / Windows: Expose the {{openWindow}}, {{closeWindow}} and {{popToRootWindow}} if possible\r\n* Adjust Alloy to make the {{}} tag available for all platforms", "attachment": [ { "id": "65535", "filename": "nav-bar-example.png", "author": { "name": "jvennemann", "key": "jvennemann", "displayName": "Jan Vennemann", "active": true, "timeZone": "Europe/Berlin" }, "created": "2018-09-18T18:22:10.000+0000", "size": 17661, "mimeType": "image/png" }, { "id": "65534", "filename": "Untitled-2.png", "author": { "name": "jvennemann", "key": "jvennemann", "displayName": "Jan Vennemann", "active": true, "timeZone": "Europe/Berlin" }, "created": "2018-09-18T18:21:33.000+0000", "size": 17661, "mimeType": "image/png" } ], "flagged": false, "summary": "Android: Navigation parity for a cross-platform Ti.UI.NavigationWindow", "creator": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "subtasks": [], "reporter": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "environment": null, "closedSprints": [ { "id": 1103, "state": "closed", "name": "2018 Sprint 25", "startDate": "2018-12-02T16:29:21.531Z", "endDate": "2018-12-16T16:29:00.000Z", "completeDate": "2018-12-15T02:33:24.870Z", "originBoardId": 114 } ], "comment": { "comments": [ { "id": "430998", "author": { "name": "kiguchi", "key": "kota", "displayName": "Kota Iguchi", "active": false, "timeZone": "America/Los_Angeles" }, "body": "Cloned to TIMOB-25537 for Windows so we can track the ticket independently.", "updateAuthor": { "name": "kiguchi", "key": "kota", "displayName": "Kota Iguchi", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2017-11-20T00:21:40.000+0000", "updated": "2017-11-20T00:21:40.000+0000" }, { "id": "431145", "author": { "name": "kiguchi", "key": "kota", "displayName": "Kota Iguchi", "active": false, "timeZone": "America/Los_Angeles" }, "body": "Pushed mocha testbed for {{Ti.UI.NavigationWindow}} that is meant to be cross-platform. https://github.com/appcelerator/titanium-mobile-mocha-suite/pull/31. Just implemented few basic navigation tests and we can start from there.\r\n", "updateAuthor": { "name": "kiguchi", "key": "kota", "displayName": "Kota Iguchi", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2017-11-22T05:19:05.000+0000", "updated": "2017-11-22T05:19:05.000+0000" }, { "id": "441655", "author": { "name": "jvennemann", "key": "jvennemann", "displayName": "Jan Vennemann", "active": true, "timeZone": "Europe/Berlin" }, "body": "Just my two cents on this topic since my mic seemed to be broken during our recent discussion.\r\n\r\nWe should also think of this as a common abstraction of the Android ActionBar and the iOS NavigationWindow (and whatever it is called on Windows^^). So apart from handling the window stack and navigation, this should also include setting bar items. Ideally it would rely on {{leftNavButtons}} and {{rightNavButtons}} on iOS and {{Ti.Android.Menu}} on Android exposed as a unified API.\r\n\r\nI have something like this in mind for configuring the ActionBar/UINavigationBar:\r\n{code:xml}\r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n{code}\r\nor programmatically configurable via a {{navigationBar}} property on {{Ti.UI.Window}} for example.\r\n\r\nThis would result in:\r\n!nav-bar-example.png|thumbnail! \r\n\r\nFor the general navigation functionality in our apps we could build upon [titanium-navigator|https://github.com/appcelerator/titanium-navigator], which exposes a set of APIs for navigation through an app. It's currently tailored to handle components from Angular and Vue. Behind the scenes it inspects the root view of that component and handles navigation accordingly so it should be easy to make it work for Alloy or Classic apps too.\r\n\r\nSome pseudo code demonstrating the usage:\r\n{code:js}\r\nimport { NavigationManager } from 'titanium-navigator';\r\n\r\nconst navigationManager = new NavigationManager();\r\n\r\n// assuming Ti.UI.createNavigationWindow is the factory for our new cross-platform stacked window management\r\nconst rootWindow = Ti.UI.createNavigationWindow({});\r\nconst child1 = Ti.UI.createWindow({});\r\nconst child2 = Ti.UI.createWindow({});\r\nrootWindow.push(child1);\r\n\r\n// Open the root window. Will call open() on rootWindow\r\nnavigationManager.open(rootWindow);\r\n// open subsequent windows. Will push the child view to the window stack and open it.\r\nnavigationManager.open(child2);\r\n// programmatically navigate back, will close the last window in the stack.\r\nnavigationManager.back();\r\n{code}\r\n\r\nInternally {{titanium-navigator}} has a set of rules so it knows how to handle navigation. See [AbstractNavigator|https://github.com/appcelerator/titanium-navigator/blob/master/src/navigators/AbstractNavigator.ts] and [NavigationManager.open()|https://github.com/appcelerator/titanium-navigator/blob/master/src/NavigationManager.ts#L145] to get a rough idea how it works.\r\n", "updateAuthor": { "name": "jvennemann", "key": "jvennemann", "displayName": "Jan Vennemann", "active": true, "timeZone": "Europe/Berlin" }, "created": "2018-09-18T18:23:08.000+0000", "updated": "2018-09-18T18:26:03.000+0000" }, { "id": "442492", "author": { "name": "gmathews", "key": "gmathews", "displayName": "Gary Mathews", "active": true, "timeZone": "America/Los_Angeles" }, "body": "master: https://github.com/appcelerator/titanium_mobile/pull/10375", "updateAuthor": { "name": "gmathews", "key": "gmathews", "displayName": "Gary Mathews", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2018-10-10T17:35:03.000+0000", "updated": "2018-10-10T17:35:03.000+0000" }, { "id": "443762", "author": { "name": "kmahalingam", "key": "kmahalingam", "displayName": "Keerthi Mahalingam", "active": false, "timeZone": "America/Los_Angeles" }, "body": "FR passed. Waiting for CR To Merge.", "updateAuthor": { "name": "kmahalingam", "key": "kmahalingam", "displayName": "Keerthi Mahalingam", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2018-11-20T00:13:57.000+0000", "updated": "2018-11-20T00:13:57.000+0000" }, { "id": "444187", "author": { "name": "cwilliams", "key": "cwilliams", "displayName": "Christopher Williams", "active": true, "timeZone": "America/New_York" }, "body": "Already FR'd before merge", "updateAuthor": { "name": "cwilliams", "key": "cwilliams", "displayName": "Christopher Williams", "active": true, "timeZone": "America/New_York" }, "created": "2018-12-04T01:00:49.000+0000", "updated": "2018-12-04T01:00:49.000+0000" } ], "maxResults": 22, "total": 22, "startAt": 0 } } }