{ "id": "139098", "key": "TIMOB-17964", "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": "18414", "description": "", "name": "Release 6.2.0", "archived": false, "released": true, "releaseDate": "2017-09-13" } ], "resolution": { "id": "1", "description": "A fix for this issue is checked into the tree and tested.", "name": "Fixed" }, "resolutiondate": "2017-08-24T21:34:30.000+0000", "created": "2014-11-05T18:43:27.000+0000", "epic": { "id": 167343, "key": "TIMOB-24638", "name": "Implement Android design library feature", "summary": "Android: Design Support Library Features", "color": { "key": "color_3" }, "done": false }, "priority": { "name": "High", "id": "2" }, "labels": [ "implementWithHyperloop", "merge-6.2.0" ], "versions": [], "issuelinks": [ { "id": "55464", "type": { "id": "10020", "name": "Depends", "inward": "is dependent of", "outward": "depends on" }, "inwardIssue": { "id": "169054", "key": "TIMOB-25003", "fields": { "summary": "iOS: Deprecate Ti.UI.iOS.Toolbar, create parity with Android, change Alloy to handle both", "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": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false } } } }, { "id": "47677", "type": { "id": "10002", "name": "Duplicate", "inward": "is duplicated by", "outward": "duplicates" }, "inwardIssue": { "id": "142620", "key": "TIMOB-18357", "fields": { "summary": "Android: Support Toolbar", "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": "2", "description": "A new feature of the product, which has yet to be developed.", "name": "New Feature", "subtask": false } } } }, { "id": "55876", "type": { "id": "10122", "name": "Gantt: start-finish", "inward": "is triggered by", "outward": "is triggering" }, "outwardIssue": { "id": "169670", "key": "ALOY-1578", "fields": { "summary": "Move Ti.UI.iOS.Toolbar to Ti.UI.Toolbar", "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": "None", "id": "6" }, "issuetype": { "id": "4", "description": "An improvement or enhancement to an existing feature or task.", "name": "Improvement", "subtask": false } } } } ], "assignee": { "name": "ybanev", "key": "ybanev", "displayName": "Yordan Banev", "active": true, "timeZone": "Europe/Athens" }, "updated": "2017-09-01T00:23:28.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": "Android 5.0 introduces a new \"Toolbar\" widget.\r\n\r\n\"A Toolbar is a generalization of action bars for use within application layouts. While an action bar is traditionally part of an Activity's opaque window decor controlled by the framework, a Toolbar may be placed at any arbitrary level of nesting within a view hierarchy. An application may choose to designate a Toolbar as the action bar for an Activity using the setActionBar() method.\"\r\n\r\nhttps://chris.banes.me/2014/10/17/appcompat-v21/\r\n\r\nIt suggests that in most cases we can use the Toolbar as the replacement for the ActionBar, though we may wish to provide the ActionBar for specific usages.\r\n\r\nSpecifics and usage suggestions as per Android Material Design\r\nhttps://www.google.com/design/spec/layout/structure.html#structure-toolbars", "attachment": [], "flagged": false, "summary": "Android 5.0: Add support for Toolbar", "creator": { "name": "ingo", "key": "ingo", "displayName": "Ingo Muschenetz", "active": true, "timeZone": "America/Los_Angeles" }, "subtasks": [], "reporter": { "name": "ingo", "key": "ingo", "displayName": "Ingo Muschenetz", "active": true, "timeZone": "America/Los_Angeles" }, "environment": null, "closedSprints": [ { "id": 920, "state": "closed", "name": "2017 Sprint 14 SDK", "startDate": "2017-07-02T16:29:41.455Z", "endDate": "2017-07-16T16:29:00.000Z", "completeDate": "2017-07-17T14:39:47.328Z", "originBoardId": 114 } ], "comment": { "comments": [ { "id": "330857", "author": { "name": "ralcocer", "key": "ralcocer", "displayName": "Ricardo Alcocer", "active": true, "timeZone": "America/Los_Angeles" }, "body": "Adding this link to the convo : http://android-developers.blogspot.com/2014/10/appcompat-v21-material-design-for-pre.html", "updateAuthor": { "name": "ralcocer", "key": "ralcocer", "displayName": "Ricardo Alcocer", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2014-11-05T18:55:36.000+0000", "updated": "2014-11-05T18:55:36.000+0000" }, { "id": "354765", "author": { "name": "manuellehner", "key": "manuellehner", "displayName": "Manuel Lehner", "active": true, "timeZone": "Europe/Berlin" }, "body": "I'm really looking forward to a progress update on this", "updateAuthor": { "name": "manuellehner", "key": "manuellehner", "displayName": "Manuel Lehner", "active": true, "timeZone": "Europe/Berlin" }, "created": "2015-06-10T16:05:43.000+0000", "updated": "2015-06-10T16:05:43.000+0000" }, { "id": "354870", "author": { "name": "geraudbourdin", "key": "geraudbourdin", "displayName": "geraud bourdin", "active": true, "timeZone": "America/Los_Angeles" }, "body": "Any update on this feature ? Would be great ! thanks.", "updateAuthor": { "name": "geraudbourdin", "key": "geraudbourdin", "displayName": "geraud bourdin", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2015-06-11T12:07:30.000+0000", "updated": "2015-06-11T12:07:30.000+0000" }, { "id": "354871", "author": { "name": "manuellehner", "key": "manuellehner", "displayName": "Manuel Lehner", "active": true, "timeZone": "Europe/Berlin" }, "body": "I think the first step could be creating a view proxy for the toolbar as you should be able to add it to a window (unlike the actionbar). At the same time the BaseActivity must set the toolbar as its ActionBar and adopt the menu creation. I'd love to give it a try but I have too much stuff to do at the moment :(", "updateAuthor": { "name": "manuellehner", "key": "manuellehner", "displayName": "Manuel Lehner", "active": true, "timeZone": "Europe/Berlin" }, "created": "2015-06-11T12:24:01.000+0000", "updated": "2015-06-11T12:24:01.000+0000" }, { "id": "360304", "author": { "name": "Yrkh8trnoy", "key": "yrkh8trnoy", "displayName": "Kiley Williams", "active": true, "timeZone": "America/Vancouver" }, "body": "Makes sense to me @manuelleehner.\r\n\r\n@ingo / @chee, what's the latest on this folks?", "updateAuthor": { "name": "Yrkh8trnoy", "key": "yrkh8trnoy", "displayName": "Kiley Williams", "active": true, "timeZone": "America/Vancouver" }, "created": "2015-08-19T04:46:43.000+0000", "updated": "2015-08-19T04:46:43.000+0000" }, { "id": "366689", "author": { "name": "titanium@webmasterei-hamburg.de", "key": "titanium@webmasterei-hamburg.de", "displayName": "Rainer Schleevoigt", "active": true, "timeZone": "Europe/Berlin" }, "body": "+1 ", "updateAuthor": { "name": "titanium@webmasterei-hamburg.de", "key": "titanium@webmasterei-hamburg.de", "displayName": "Rainer Schleevoigt", "active": true, "timeZone": "Europe/Berlin" }, "created": "2015-10-13T19:30:36.000+0000", "updated": "2015-10-13T19:30:36.000+0000" }, { "id": "368554", "author": { "name": "luispedro.ezy", "key": "luispedro.ezy", "displayName": "Luis Pedro Ferreira", "active": true, "timeZone": "Europe/London" }, "body": "Looking forward", "updateAuthor": { "name": "luispedro.ezy", "key": "luispedro.ezy", "displayName": "Luis Pedro Ferreira", "active": true, "timeZone": "Europe/London" }, "created": "2015-11-01T17:32:05.000+0000", "updated": "2015-11-01T17:32:05.000+0000" }, { "id": "371350", "author": { "name": "chmiiller", "key": "chmiiller", "displayName": "Carlos Henrique Zinato", "active": true, "timeZone": "America/Los_Angeles" }, "body": "+1", "updateAuthor": { "name": "chmiiller", "key": "chmiiller", "displayName": "Carlos Henrique Zinato", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2015-11-24T16:46:42.000+0000", "updated": "2015-11-24T16:46:42.000+0000" }, { "id": "373473", "author": { "name": "yomybaby", "key": "yomybaby", "displayName": "Jong Eun Lee", "active": true, "timeZone": "Asia/Tokyo" }, "body": "+1", "updateAuthor": { "name": "yomybaby", "key": "yomybaby", "displayName": "Jong Eun Lee", "active": true, "timeZone": "Asia/Tokyo" }, "created": "2015-12-23T20:23:27.000+0000", "updated": "2015-12-23T20:23:27.000+0000" }, { "id": "375562", "author": { "name": "thomas.neerup@eg.dk", "key": "thomas.neerup@eg.dk", "displayName": "Thomas Neerup", "active": true, "timeZone": "Europe/Copenhagen" }, "body": "+1", "updateAuthor": { "name": "thomas.neerup@eg.dk", "key": "thomas.neerup@eg.dk", "displayName": "Thomas Neerup", "active": true, "timeZone": "Europe/Copenhagen" }, "created": "2016-01-31T13:36:36.000+0000", "updated": "2016-01-31T13:36:36.000+0000" }, { "id": "375563", "author": { "name": "Yrkh8trnoy", "key": "yrkh8trnoy", "displayName": "Kiley Williams", "active": true, "timeZone": "America/Vancouver" }, "body": "+1", "updateAuthor": { "name": "Yrkh8trnoy", "key": "yrkh8trnoy", "displayName": "Kiley Williams", "active": true, "timeZone": "America/Vancouver" }, "created": "2016-01-31T17:24:50.000+0000", "updated": "2016-01-31T17:24:50.000+0000" }, { "id": "375567", "author": { "name": "echeung@leviton.com", "key": "echeung@leviton.com", "displayName": "Eric Cheung", "active": true, "timeZone": "America/Havana" }, "body": "+1", "updateAuthor": { "name": "echeung@leviton.com", "key": "echeung@leviton.com", "displayName": "Eric Cheung", "active": true, "timeZone": "America/Havana" }, "created": "2016-01-31T20:27:59.000+0000", "updated": "2016-01-31T20:27:59.000+0000" }, { "id": "384711", "author": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "body": "-Also requested on SO:-\r\n\r\nhttp://stackoverflow.com/questions/36941875/appcelerator-android-new-bottom-navigation-bar", "updateAuthor": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "created": "2016-05-04T12:27:58.000+0000", "updated": "2016-05-04T13:01:52.000+0000" }, { "id": "384712", "author": { "name": "manuellehner", "key": "manuellehner", "displayName": "Manuel Lehner", "active": true, "timeZone": "Europe/Berlin" }, "body": "[~fokkezb] The bottom navigation bar was just added to the design guide. This is not a Toolbar. It's a complete new component (and there's no native class for it, not yet).", "updateAuthor": { "name": "manuellehner", "key": "manuellehner", "displayName": "Manuel Lehner", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-05-04T12:54:42.000+0000", "updated": "2016-05-04T12:54:42.000+0000" }, { "id": "384714", "author": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "body": "[~manuellehner] o wait, I was rushing through SO questions to fast. This is the new iOS Tabgroup for Android! I really hope Android implement that.. don't like it, even though with larger screens bottom tabgroups do navigate better than top navigation or drawer layouts.", "updateAuthor": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "created": "2016-05-04T13:01:23.000+0000", "updated": "2016-05-04T13:01:23.000+0000" }, { "id": "389942", "author": { "name": "core13", "key": "core13", "displayName": "Malcolm Hollingsworth", "active": true, "timeZone": "Europe/London" }, "updateAuthor": { "name": "core13", "key": "core13", "displayName": "Malcolm Hollingsworth", "active": true, "timeZone": "Europe/London" }, "created": "2016-07-05T14:21:58.000+0000", "updated": "2016-07-05T14:21:58.000+0000" }, { "id": "407573", "author": { "name": "jormagar", "key": "jormagar", "displayName": "Jorge Macias Garcia", "active": true, "timeZone": "Europe/Brussels" }, "body": "updates about this?", "updateAuthor": { "name": "jormagar", "key": "jormagar", "displayName": "Jorge Macias Garcia", "active": true, "timeZone": "Europe/Brussels" }, "created": "2017-02-22T13:34:08.000+0000", "updated": "2017-02-22T13:34:08.000+0000" }, { "id": "421074", "author": { "name": "ybanev", "key": "ybanev", "displayName": "Yordan Banev", "active": true, "timeZone": "Europe/Athens" }, "body": "[~jquick], yes, that sounds reasonable. But I had another concept in my head.\r\n\r\nToolbar is implemented as a new UI component that can be used as any other widget. With a layer of abstraction I made it accessible as a parameter for the setSupportActionBar() method from the UI module. My concern was that this method expects an instance of Toolbar. And Toolbar does not have borders by default. So the only way to have borders would be to extend the class and override it's doLayout method. Which is possible of course, but I am not sure if it is worth it for having borders (it does quite a lot of things).\r\n\r\nAs for a concept of adding Toolbar support I went that way: \r\nHave it available as a separate widget, since we have it on iOS. Support what can be supported without much trouble on both platforms (translucency, color, etc...) and add Android only methods and properties. That way we could maximize code reusing for basic toolbars. Add the option to pass it as an ActionBar for Android activities. Since we support Theme.AppCompat.NoActionBar I decided we should use it if we want more customizable ActionBar. That's the most common way in Android IMO.That way you get a Toolbar instance which supports ActionBar's methods through the {{activity.actionBar}} reference from the docs. So I actually never thought about having both Toolbar and default ActionBar at the same time acting as an ActionBar, because the theme disables it.\r\n\r\nNow that I think about it, it may be too Android-ish approach.", "updateAuthor": { "name": "ybanev", "key": "ybanev", "displayName": "Yordan Banev", "active": true, "timeZone": "Europe/Athens" }, "created": "2017-06-06T10:36:58.000+0000", "updated": "2017-06-06T10:36:58.000+0000" }, { "id": "422152", "author": { "name": "ybanev", "key": "ybanev", "displayName": "Yordan Banev", "active": true, "timeZone": "Europe/Athens" }, "body": "PR: https://github.com/appcelerator/titanium_mobile/pull/9147", "updateAuthor": { "name": "ybanev", "key": "ybanev", "displayName": "Yordan Banev", "active": true, "timeZone": "Europe/Athens" }, "created": "2017-06-16T14:16:05.000+0000", "updated": "2017-06-16T14:16:05.000+0000" }, { "id": "422168", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "A quick note that I've also discussed with [~ybanev]: We should definitely move the proposed {{Ti.UI.Android.Toolbar}} namespace to {{Ti.UI.Toolbar}}, so we can move {{Ti.UI.iOS.Toolbar}} back to the old namespace and add Android parity on that one. It will give a huge bump in terms of a unified API, similar as we recently did for the {{Ti.Media.AudioRecorder}} and planning to do with {{Ti.UI.iOS.NavigationWindow}} as well.", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2017-06-16T18:02:07.000+0000", "updated": "2017-06-16T18:02:07.000+0000" }, { "id": "424505", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "I have created TIMOB-25003 to bring a unified cross-platform API for Ti.UI.Toolbar together with iOS. So for this ticket, the existing PR must move from Ti.UI.Android to Ti.UI as well (basically just a few adjustments in the class-naming I guess). After that, we will do an Alloy-PR that will also be listed in TIMOB-25003 to remove the platform-specific handling.", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2017-07-21T04:31:30.000+0000", "updated": "2017-07-21T04:31:30.000+0000" }, { "id": "426848", "author": { "name": "ybanev", "key": "ybanev", "displayName": "Yordan Banev", "active": true, "timeZone": "Europe/Athens" }, "body": "6_2_X: https://github.com/appcelerator/titanium_mobile/pull/9329", "updateAuthor": { "name": "ybanev", "key": "ybanev", "displayName": "Yordan Banev", "active": true, "timeZone": "Europe/Athens" }, "created": "2017-08-17T13:15:48.000+0000", "updated": "2017-08-17T13:15:48.000+0000" }, { "id": "426904", "author": { "name": "michael", "key": "michael", "displayName": "Michael Gangolf", "active": true, "timeZone": "Europe/Berlin" }, "body": "Would it be possible to add scrollFlags (http://karthikraj.net/2016/12/24/scrolling-behavior-for-appbars-in-android/) to hide the Toolbar when scrolling content up?", "updateAuthor": { "name": "michael", "key": "michael", "displayName": "Michael Gangolf", "active": true, "timeZone": "Europe/Berlin" }, "created": "2017-08-18T17:34:11.000+0000", "updated": "2017-08-18T17:34:11.000+0000" }, { "id": "427221", "author": { "name": "lchoudhary", "key": "lchoudhary", "displayName": "Lokesh Choudhary", "active": true, "timeZone": "America/Los_Angeles" }, "body": "FR Passed for both master & backport PR.\r\nPR's merged.", "updateAuthor": { "name": "lchoudhary", "key": "lchoudhary", "displayName": "Lokesh Choudhary", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2017-08-24T21:34:30.000+0000", "updated": "2017-08-24T21:34:30.000+0000" }, { "id": "427273", "author": { "name": "lchoudhary", "key": "lchoudhary", "displayName": "Lokesh Choudhary", "active": true, "timeZone": "America/Los_Angeles" }, "body": "Verified the fix with SDK 6.2.0.v20170825165823 & 7.0.0.v20170825165854.\r\n\r\nClosing.\r\n\r\nStudio Ver: 4.9.1.201707200100\r\nSDK Ver: 6.2.0.v20170825165823, 7.0.0.v20170825165854\r\nOS Ver: 10.12.3\r\nXcode Ver: Xcode 8.3.3\r\nAppc NPM: 4.2.9\r\nAppc CLI: 6.2.3\r\nTi CLI Ver: 5.0.14\r\nAlloy Ver: 1.9.13\r\nNode Ver: 6.10.1\r\nJava Ver: 1.8.0_101\r\nDevices: ⇨ google Nexus 5 — Android 6.0.1\r\n⇨ google Pixel — Android 7.1.1", "updateAuthor": { "name": "lchoudhary", "key": "lchoudhary", "displayName": "Lokesh Choudhary", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2017-08-26T01:09:18.000+0000", "updated": "2017-08-26T01:11:46.000+0000" } ], "maxResults": 36, "total": 36, "startAt": 0 } } }