{ "id": "151710", "key": "TIMOB-19666", "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": "16997", "name": "Release 5.2.0", "archived": false, "released": true, "releaseDate": "2016-02-23" } ], "resolution": { "id": "1", "description": "A fix for this issue is checked into the tree and tested.", "name": "Fixed" }, "resolutiondate": "2016-02-16T05:45:53.000+0000", "created": "2015-10-05T06:17:25.000+0000", "priority": { "name": "Medium", "id": "3" }, "labels": [ "iOS9.1", "notable", "photo", "photogallery", "qe-5.2.0" ], "versions": [], "issuelinks": [ { "id": "50383", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "outwardIssue": { "id": "154623", "key": "TIDOC-2435", "fields": { "summary": "iOS 9.1 LivePhoto feature needs to be documented", "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": "50578", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "outwardIssue": { "id": "154909", "key": "ALOY-1356", "fields": { "summary": "Add support for LivePhotoView under Ti.UI.iOS namespace", "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 } } } } ], "assignee": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "updated": "2016-02-17T18:53:39.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": "*Summary:*\r\niOS 9.1 provides a way to receive, display and share live photos using the {{PHLivePhoto}} related classes. A live photo is a photo, that consists of several photos taken together as frames but it still is no video. It can be displayed using the {{PHLivePhotoView}} and managed through the {{PHImageManager}} or {{UIImagePickerController}} (which we use). \r\n\r\n*Proposal:*\r\nSummarized, our proposal should be:\r\n* a) to support taking live photos using {{Ti.Media.openPhotoGallery()}} method\r\n* b) allow developers to display live photos in a new view proxy e.g. {{Ti.UI.iOS.LivePhoto}} or directly in the existing {{Ti.UI.ImageView}} using auto detection on the image source type.\r\n\r\n*Documentation:*\r\n* https://developer.apple.com/library/prerelease/ios/documentation/PhotosUI/Reference/PHLivePhotoView_Class/index.html#//apple_ref/doc/uid/TP40016582\r\n* https://developer.apple.com/library/prerelease/ios/documentation/Photos/Reference/PHLivePhoto_Class/index.html#//apple_ref/doc/uid/TP40016581", "attachment": [], "flagged": false, "summary": "iOS9.1: Support PHLivePhoto + PHLivePhotoView", "creator": { "name": "cng", "key": "cng", "displayName": "Chee Kiat Ng", "active": false, "timeZone": "America/Los_Angeles" }, "subtasks": [], "reporter": { "name": "cng", "key": "cng", "displayName": "Chee Kiat Ng", "active": false, "timeZone": "America/Los_Angeles" }, "environment": "iOS 9.1", "closedSprints": [ { "id": 529, "state": "closed", "name": "2015 Sprint 24 SDK", "startDate": "2015-11-21T01:30:12.670Z", "endDate": "2015-12-05T01:30:00.000Z", "completeDate": "2015-12-07T03:57:17.094Z", "originBoardId": 114 }, { "id": 574, "state": "closed", "name": "2016 Sprint 4 SDK", "startDate": "2016-02-13T01:33:48.415Z", "endDate": "2016-02-27T01:33:00.000Z", "completeDate": "2016-02-29T03:44:48.886Z", "originBoardId": 114 } ], "comment": { "comments": [ { "id": "371490", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "PR pending: https://github.com/appcelerator/titanium_mobile/pull/7479\r\n\r\nDemo (live photo view):\r\n{code:javascript}\r\nvar window = Ti.UI.createWindow({\r\n title: \"iOS 9.1 Live Photos\",\r\n backgroundColor: \"#fff\"\r\n});\r\n\r\nvar view = null;\r\n\r\nvar nav = Ti.UI.iOS.createNavigationWindow({\r\n window: window\r\n});\r\n\r\nvar btn1 = Ti.UI.createButton({\r\n systemButton: Ti.UI.iPhone.SystemButton.ADD,\r\n top:30\r\n});\r\n\r\nbtn1.addEventListener(\"click\", openGallery);\r\n\r\nvar btn2 = Ti.UI.createButton({\r\n systemButton: Ti.UI.iPhone.SystemButton.TRASH,\r\n top:10\r\n});\r\n\r\nbtn2.addEventListener(\"click\", resetImageView);\r\n\r\nwindow.setRightNavButton(btn1);\r\nwindow.setLeftNavButton(btn2);\r\nnav.open();\r\n\r\nfunction openGallery() {\r\n Ti.Media.openPhotoGallery({\r\n mediaTypes: [Ti.Media.MEDIA_TYPE_PHOTO, Ti.Media.MEDIA_TYPE_LIVEPHOTO],\r\n success: function(e) {\r\n var photo = e.media; // Static photo without motion of type Ti.Blob\r\n var livePhoto = e.livePhoto // Live photo of type Ti.UI.iOS.LivePhoto\r\n\r\n Ti.API.warn(e.mediaType); // Should display \"com.apple.live-photo\" when a live photo is selected\r\n\r\n if(livePhoto) {\r\n // Live photo supported and returned\r\n view = Ti.UI.iOS.createLivePhotoView({\r\n livePhoto: livePhoto,\r\n backgroundColor: \"#f00\"\r\n });\r\n\r\n view.addEventListener(\"start\", function(e) {\r\n Ti.API.warn(\"Start playback\");\r\n Ti.API.warn(e);\r\n });\r\n\r\n view.addEventListener(\"stop\", function(e) {\r\n Ti.API.warn(\"Stop playback\");\r\n Ti.API.warn(e);\r\n });\r\n\r\n } else if (photo && e.mediaType == Ti.Media.MEDIA_TYPE_PHOTO) {\r\n // Default photo for iOS < 9.1\r\n view = Ti.UI.createImageView({\r\n image: photo\r\n });\r\n } else {\r\n Ti.API.warn(\"Fallback: Most probably selected video (not part of this example).\");\r\n return;\r\n }\r\n window.add(view);\r\n }\r\n });\r\n}\r\n\r\nfunction resetImageView() {\r\n var children = window.children;\r\n\r\n for(var i = 0; i < children.length; i++) {\r\n var child = children[i];\r\n window.remove(child);\r\n }\r\n}\r\n{code}\r\n\r\nDemo (live photo badges):\r\n{code:javascript}\r\nvar window = Ti.UI.createWindow({\r\n backgroundColor: \"#fff\",\r\n layout: \"vertical\"\r\n});\r\n\r\naddViewWithOptions(\"No options (default: Over content)\");\r\naddViewWithOptions(\"Over content\", Ti.UI.iOS.LIVEPHOTO_BADGE_OPTIONS_OVER_CONTENT);\r\naddViewWithOptions(\"Live off\", Ti.UI.iOS.LIVEPHOTO_BADGE_OPTIONS_LIVE_OFF);\r\naddViewWithOptions(\"Bit-wise options\", Ti.UI.iOS.LIVEPHOTO_BADGE_OPTIONS_OVER_CONTENT | Ti.UI.iOS.LIVEPHOTO_BADGE_OPTIONS_LIVE_OFF);\r\n\r\nfunction addViewWithOptions(title, options) {\r\n\tvar liveBadge = Ti.UI.iOS.createLivePhotoBadge(options);\r\n\r\n\tvar view = Ti.UI.createView({\r\n\t\twidth: 300,\r\n\t\theight: 100,\r\n\t\ttop: 40,\r\n\t\tbackgroundColor: \"#333\"\r\n\t});\r\n\r\n\tvar label = Ti.UI.createLabel({\r\n\t\tcolor: \"#fff\",\r\n\t\ttext: title\r\n\t});\r\n\r\n\tvar img = Ti.UI.createImageView({\r\n\t\timage: liveBadge,\r\n\t\ttop: 10,\r\n\t\tright: 10\r\n\t});\r\n\r\n\tview.add(label);\r\n\tview.add(img);\r\n\twindow.add(view);\r\n}\r\n\r\nwindow.open();\r\n{code}", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2015-11-25T23:26:05.000+0000", "updated": "2015-11-30T19:40:49.000+0000" }, { "id": "371706", "author": { "name": "cng", "key": "cng", "displayName": "Chee Kiat Ng", "active": false, "timeZone": "America/Los_Angeles" }, "body": "CR and FT passed. PR merged.", "updateAuthor": { "name": "cng", "key": "cng", "displayName": "Chee Kiat Ng", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2015-12-01T00:35:11.000+0000", "updated": "2015-12-01T00:35:11.000+0000" }, { "id": "375654", "author": { "name": "wluu", "key": "wluu", "displayName": "Wilson Luu", "active": false, "timeZone": "America/Los_Angeles" }, "body": "[~hansknoechel], [~cng], It looks like the LivePhoto is not working with {{Ti.Media.showCamera()}}. Should we reopen this ticket or file a new ticket?\r\n\r\n[~jlongton], please go ahead and paste your code that exhibit this bug.", "updateAuthor": { "name": "wluu", "key": "wluu", "displayName": "Wilson Luu", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2016-02-01T22:59:35.000+0000", "updated": "2016-02-01T22:59:35.000+0000" }, { "id": "375656", "author": { "name": "jlongton", "key": "jlongton", "displayName": "Josh Longton", "active": true, "timeZone": "Europe/London" }, "body": "\r\n{code:javascript}\r\nvar window = Ti.UI.createWindow({\r\n title: \"iOS 9.1 Live Photos\",\r\n backgroundColor: \"#fff\"\r\n});\r\n \r\nvar view = null;\r\n \r\nvar nav = Ti.UI.iOS.createNavigationWindow({\r\n window: window\r\n});\r\n \r\nvar btn1 = Ti.UI.createButton({\r\n systemButton: Ti.UI.iPhone.SystemButton.ADD,\r\n top:30\r\n});\r\n \r\nbtn1.addEventListener(\"click\", openCamera);\r\n// btn1.addEventListener(\"click\", openGallery);\r\n \r\nvar btn2 = Ti.UI.createButton({\r\n systemButton: Ti.UI.iPhone.SystemButton.TRASH,\r\n top:10\r\n});\r\n \r\nbtn2.addEventListener(\"click\", resetImageView);\r\n \r\nwindow.setRightNavButton(btn1);\r\nwindow.setLeftNavButton(btn2);\r\nnav.open();\r\nfunction openCamera(){\r\n\tTi.Media.showCamera({\r\n\t\tmediaTypes: [Ti.Media.MEDIA_TYPE_PHOTO, Ti.Media.MEDIA_TYPE_LIVEPHOTO, Ti.Media.MEDIA_TYPE_VIDEO],\r\n\t\tsuccess: function(e) {\r\n \t\tvar photo = e.media; // Static photo without motion of type Ti.Blob\r\n \t\tvar livePhoto = e.livePhoto; // Live photo of type Ti.UI.iOS.LivePhoto\r\n \t\t if(livePhoto) {\r\n\t\t\t // Live photo supported and returned\r\n\t\t\t view = Ti.UI.iOS.createLivePhotoView({\r\n\t\t\t livePhoto: livePhoto,\r\n\t\t\t backgroundColor: \"#f00\"\r\n\t\t\t });\r\n\t\t\t \r\n\t\t\t view.addEventListener(\"start\", function(e) {\r\n\t\t\t Ti.API.warn(\"Start playback\");\r\n\t\t\t Ti.API.warn(e);\r\n\t\t\t });\r\n\t\t\t \r\n\t\t\t view.addEventListener(\"stop\", function(e) {\r\n\t\t\t Ti.API.warn(\"Stop playback\");\r\n\t\t\t Ti.API.warn(e);\r\n\t\t\t });\r\n\t\t\t \r\n\t\t\t } else if (photo && e.mediaType == Ti.Media.MEDIA_TYPE_PHOTO) {\r\n\t\t\t // Default photo for iOS < 9.1\r\n\t\t\t view = Ti.UI.createImageView({\r\n\t\t\t image: photo\r\n\t\t\t });\r\n\t\t\t } else {\r\n\t\t\t Ti.API.warn(\"Fallback: Most probably selected video (not part of this example).\");\r\n\t\t\t return;\r\n\t\t\t }\r\n \t\twindow.add(view);\r\n \t}\r\n });\r\n}\r\n \r\n// function openGallery() {\r\n // Ti.Media.openPhotoGallery({\r\n // mediaTypes: [Ti.Media.MEDIA_TYPE_PHOTO, Ti.Media.MEDIA_TYPE_LIVEPHOTO],\r\n // success: function(e) {\r\n // var photo = e.media; // Static photo without motion of type Ti.Blob\r\n // var livePhoto = e.livePhoto; // Live photo of type Ti.UI.iOS.LivePhoto\r\n// \r\n // Ti.API.warn(e.mediaType); // Should display \"com.apple.live-photo\" when a live photo is selected\r\n// \r\n // if(livePhoto) {\r\n // // Live photo supported and returned\r\n // view = Ti.UI.iOS.createLivePhotoView({\r\n // livePhoto: livePhoto,\r\n // backgroundColor: \"#f00\"\r\n // });\r\n// \r\n // view.addEventListener(\"start\", function(e) {\r\n // Ti.API.warn(\"Start playback\");\r\n // Ti.API.warn(e);\r\n // });\r\n// \r\n // view.addEventListener(\"stop\", function(e) {\r\n // Ti.API.warn(\"Stop playback\");\r\n // Ti.API.warn(e);\r\n // });\r\n// \r\n // } else if (photo && e.mediaType == Ti.Media.MEDIA_TYPE_PHOTO) {\r\n // // Default photo for iOS < 9.1\r\n // view = Ti.UI.createImageView({\r\n // image: photo\r\n // });\r\n // } else {\r\n // Ti.API.warn(\"Fallback: Most probably selected video (not part of this example).\");\r\n // return;\r\n // }\r\n // window.add(view);\r\n // }\r\n // });\r\n// }\r\n \r\nfunction resetImageView() {\r\n var children = window.children;\r\n \r\n for(var i = 0; i < children.length; i++) {\r\n var child = children[i];\r\n window.remove(child);\r\n }\r\n}\r\n{code}", "updateAuthor": { "name": "jlongton", "key": "jlongton", "displayName": "Josh Longton", "active": true, "timeZone": "Europe/London" }, "created": "2016-02-01T23:04:28.000+0000", "updated": "2016-02-01T23:04:28.000+0000" }, { "id": "375657", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "[~wluu] It was an issue in my proposal which I just corrected. For now (iOS 9.1), it's not possible to capture a new live photo but only to select an existing one. The docs should state that behavior as well. As soon as Apple makes it possible to capture live photos as well, I would file a new ticket and implement it as well. Thanks!", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-02-01T23:05:06.000+0000", "updated": "2016-02-01T23:05:06.000+0000" }, { "id": "375663", "author": { "name": "wluu", "key": "wluu", "displayName": "Wilson Luu", "active": false, "timeZone": "America/Los_Angeles" }, "body": "[~hansknoechel], Okay, I'll file a doc ticket for this issue.", "updateAuthor": { "name": "wluu", "key": "wluu", "displayName": "Wilson Luu", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2016-02-01T23:38:06.000+0000", "updated": "2016-02-01T23:38:06.000+0000" }, { "id": "376729", "author": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "body": "Reopening because with latest nightly (5.2.0.v20160211193617) I get LIVEPHOTO mediaType but no livePhoto:\r\n\r\n{code:js}\r\n Ti.Media.openPhotoGallery({\r\n mediaTypes: [Ti.Media.MEDIA_TYPE_PHOTO, Ti.Media.MEDIA_TYPE_LIVEPHOTO],\r\n success: function(e) {\r\n Ti.API.warn(e.mediaType);\r\n Ti.API.warn(e.media);\r\n Ti.API.warn(e.livePhoto);\r\n }\r\n });\r\n{code}\r\n\r\n{code}\r\n[WARN] com.apple.live-photo\r\n[WARN] [object TiBlob]\r\n[WARN] \r\n{code}", "updateAuthor": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "created": "2016-02-12T13:47:33.000+0000", "updated": "2016-02-12T13:47:33.000+0000" }, { "id": "376739", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "This issue happens when we want to receive a LivePhoto but no {{Ti.UI.LivePhotoView}} is defined. Although it's an edge-case, because live photos can only used be displayed inside a view, we should fix it to prevent questions.\r\n\r\nPR (master): https://github.com/appcelerator/titanium_mobile/pull/7717\r\nPR (5_2_X): https://github.com/appcelerator/titanium_mobile/pull/7718", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-02-12T16:07:39.000+0000", "updated": "2016-02-12T16:07:39.000+0000" }, { "id": "376853", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "Considering to close the PR, since the issue is not caused by the implementation itself, but an issue when running on main thread (TIMOB-20397). [~fokkezb] as you re-opened it, what do you think?", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-02-13T17:09:36.000+0000", "updated": "2016-02-13T17:09:36.000+0000" }, { "id": "376865", "author": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "body": "Also, http://docs.appcelerator.com/platform/latest/#!/api/Titanium.UI.iOS.LivePhotoView-method-startWithPlaybackStyle does not work and can't find the implementation as wel: https://github.com/appcelerator/titanium_mobile/search?q=startWithPlaybackStyle", "updateAuthor": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "created": "2016-02-13T21:14:19.000+0000", "updated": "2016-02-13T21:14:54.000+0000" }, { "id": "376868", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "Fixed docs issue", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-02-13T21:21:53.000+0000", "updated": "2016-02-13T21:21:53.000+0000" }, { "id": "376882", "author": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "body": "[~hansknoechel] did you test the manual start and stop? I see it triggering the start and stop events but nothing happens for a few seconds after start and then it shows only a very short part of the animation. With hint even shorter. Also, when I call stop during this it kind of freezes. It doesn't feel like it works as it should.\r\n\r\nOn the PR for using {{Ti.Media.MEDIA_TYPE_LIVEPHOTO}}; I still think we need to fix this. I don't see why it's related to TIMOB-20397 as it's simply a matter of the LivePhoto proxy API not being included in the build if you don't also use the view.", "updateAuthor": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "created": "2016-02-14T17:02:21.000+0000", "updated": "2016-02-14T17:02:21.000+0000" }, { "id": "376883", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "Regarding the start/stop: I was also ensure, but it looks like the native behavior, since it's not really a video so the sequence is really short (faded).\r\n\r\nThe PR is still valid for making the {{Ti.UI.iOS.LivePhoto}} available, but the threading issues also fixed in the PR are unrelated so I would clean up the PR to only remove the {{#ifdef}}'s and fix the main-thread-related issues i the separate ticket. ", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-02-14T17:47:58.000+0000", "updated": "2016-02-14T17:47:58.000+0000" }, { "id": "376884", "author": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "body": "I've updated the 5.2.0 sample so you can see what I see. I doubt this is how it should look. You'd expect full to show the full length of the live photo and both of them not to have such a long delay before they do anything.", "updateAuthor": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "created": "2016-02-14T18:27:04.000+0000", "updated": "2016-02-14T18:27:04.000+0000" }, { "id": "376887", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "Got it and finally reproduced it. The methods had threading problems, I added the 1-liner to the existing PR. Also added a start/stop test to the example: https://gist.github.com/hansemannn/68252eb5c106c2552d21", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-02-14T20:24:09.000+0000", "updated": "2016-02-14T20:24:09.000+0000" }, { "id": "376897", "author": { "name": "cng", "key": "cng", "displayName": "Chee Kiat Ng", "active": false, "timeZone": "America/Los_Angeles" }, "body": "Can we have a simple test case here for the new fix? QE will appreciate it. [~hansknoechel] [~fokkezb]", "updateAuthor": { "name": "cng", "key": "cng", "displayName": "Chee Kiat Ng", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2016-02-15T04:57:14.000+0000", "updated": "2016-02-15T04:57:14.000+0000" }, { "id": "376907", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "See Gist above :-)", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-02-15T08:10:41.000+0000", "updated": "2016-02-15T08:10:41.000+0000" }, { "id": "376913", "author": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "body": "[~hansknoechel] patched my SDK with he main thread fix and it works fine now.", "updateAuthor": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "created": "2016-02-15T08:48:50.000+0000", "updated": "2016-02-15T08:48:50.000+0000" }, { "id": "376940", "author": { "name": "cng", "key": "cng", "displayName": "Chee Kiat Ng", "active": false, "timeZone": "America/Los_Angeles" }, "body": "CR and FT passed.\r\nPRs merged.", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-02-16T05:45:13.000+0000", "updated": "2016-02-16T07:57:03.000+0000" }, { "id": "377134", "author": { "name": "jlongton", "key": "jlongton", "displayName": "Josh Longton", "active": true, "timeZone": "Europe/London" }, "updateAuthor": { "name": "jlongton", "key": "jlongton", "displayName": "Josh Longton", "active": true, "timeZone": "Europe/London" }, "created": "2016-02-17T18:53:19.000+0000", "updated": "2016-02-17T18:53:19.000+0000" } ], "maxResults": 25, "total": 25, "startAt": 0 } } }