{ "id": "153238", "key": "TIMOB-20004", "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": "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": "2015-12-29T10:34:35.000+0000", "created": "2015-11-17T14:24:13.000+0000", "priority": { "name": "Medium", "id": "3" }, "labels": [ "notable" ], "versions": [ { "id": "14826", "description": "Release 5.1.0-remaining iOS9 features, Android M features", "name": "Release 5.1.0", "archived": false, "released": true, "releaseDate": "2015-11-20" } ], "issuelinks": [ { "id": "49874", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "outwardIssue": { "id": "153233", "key": "TIMOB-20002", "fields": { "summary": "iOS: Ti.Geolocation.requestLocationPermissions is not always called?", "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": "50012", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "outwardIssue": { "id": "153561", "key": "TIMOB-20084", "fields": { "summary": "Provide authorizationStatus property on requestPermissions callbacks", "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 } } } } ], "assignee": { "name": "ssombhatla", "key": "ssombhatla", "displayName": "Srikanth Sombhatla", "active": false, "timeZone": "Asia/Singapore" }, "updated": "2016-02-10T00:52:02.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": "While working in the [5.1 sample|https://github.com/appcelerator-developer-relations/appc-sample-ti510] I noticed some differences between the responses of the new permission request methods. I created a separate test case to show the differences so we can address them in a next release. Nothing big, except for the first bullet maybe.\r\n\r\n* Unlike the others, the callback for {{requestLocationPermissions()}} is only called the first time. You have to force close and then re-open the app for it to work again.\r\n* The response for {{requestLocationPermissions}} also has {{authorizationStatus}}, which would be very useful to have in the response for the others as well.\r\n* On success, the response for {{requestLocationPermissions}} has an empty string for {{error}} where it should either have a message or be undefined.\r\n* When unknown, {{requestContactsPermissions}} has a not very helpful _Access Denied_ {{error}} instead of just being undefined like {{Calendar}} and {{Camera}}.\r\n* Unless permission was granted, the {{error}} for {{requestLocationPermissions}} is always _The user is unable to allow access to location._, which is not very helpful or even misleading since the user is perfectly able, he just denied permission to the app. Calendar and Contacts have better error messages.\r\n* When denied, the response for {{requestCameraPermissions}} has no {{error}} like the others.\r\n* I have no idea where {{code}} comes from but if I deny it (probably by coincidence) correctly maps to {{AUTHORIZATION_DENIED}} for Calendar and Contacts. Would be helpful to have the meaning of this code documented.\r\n* In iOS 8, denying contacts permission sends success response to callback. \r\n\r\nh2. Sample\r\n\r\nDon't forget to add {{NSLocationAlwaysUsageDescriptionDeny or grant permission to test different scenarios.}} to {{tiapp.xml}}.\r\n\r\n{code:javascript}\r\nvar win = Ti.UI.createWindow({\r\n\tbackgroundColor: 'white'\r\n});\r\n\r\nvar btn = Ti.UI.createButton({\r\n\ttitle: 'Request Permissions'\r\n});\r\n\r\nbtn.addEventListener('click', function(e) {\r\n\r\n\tconsole.log('\\n--------------------------------------------------------\\n');\r\n\r\n\tvar Calendar = {};\r\n\tCalendar[Ti.Calendar.AUTHORIZATION_AUTHORIZED] = 'AUTHORIZATION_AUTHORIZED';\r\n\tCalendar[Ti.Calendar.AUTHORIZATION_DENIED] = 'AUTHORIZATION_DENIED';\r\n\tCalendar[Ti.Calendar.AUTHORIZATION_RESTRICTED] = 'AUTHORIZATION_RESTRICTED';\r\n\tCalendar[Ti.Calendar.AUTHORIZATION_UNKNOWN] = 'AUTHORIZATION_UNKNOWN';\r\n\r\n\tconsole.log('Ti.Calendar.hasCalendarPermissions ' + Ti.Calendar.hasCalendarPermissions());\r\n\tconsole.log('Ti.Calendar.eventsAuthorization Ti.Calendar.' + Calendar[Ti.Calendar.eventsAuthorization] + '\\n');\r\n\r\n\tvar Contacts = {};\r\n\tContacts[Ti.Contacts.AUTHORIZATION_AUTHORIZED] = 'AUTHORIZATION_AUTHORIZED';\r\n\tContacts[Ti.Contacts.AUTHORIZATION_DENIED] = 'AUTHORIZATION_DENIED';\r\n\tContacts[Ti.Contacts.AUTHORIZATION_RESTRICTED] = 'AUTHORIZATION_RESTRICTED';\r\n\tContacts[Ti.Contacts.AUTHORIZATION_UNKNOWN] = 'AUTHORIZATION_UNKNOWN';\r\n\r\n\tconsole.log('Ti.Contacts.hasContactsPermissions ' + Ti.Contacts.hasContactsPermissions());\r\n\tconsole.log('Ti.Contacts.contactsAuthorization Ti.Contacts.' + Contacts[Ti.Contacts.contactsAuthorization] + '\\n');\r\n\r\n\tvar Geolocation = {};\r\n\tGeolocation[Ti.Geolocation.AUTHORIZATION_AUTHORIZED] = 'AUTHORIZATION_AUTHORIZED';\r\n\tGeolocation[Ti.Geolocation.AUTHORIZATION_DENIED] = 'AUTHORIZATION_DENIED';\r\n\tGeolocation[Ti.Geolocation.AUTHORIZATION_RESTRICTED] = 'AUTHORIZATION_RESTRICTED';\r\n\tGeolocation[Ti.Geolocation.AUTHORIZATION_UNKNOWN] = 'AUTHORIZATION_UNKNOWN';\r\n\tGeolocation[Ti.Geolocation.AUTHORIZATION_ALWAYS] = 'AUTHORIZATION_ALWAYS';\r\n\tGeolocation[Ti.Geolocation.AUTHORIZATION_WHEN_IN_USE] = 'AUTHORIZATION_WHEN_IN_USE';\r\n\r\n\tconsole.log('Ti.Geolocation.hasLocationPermissions ' + Ti.Geolocation.hasLocationPermissions(Ti.Geolocation.AUTHORIZATION_ALWAYS));\r\n\tconsole.log('Ti.Geolocation.locationServicesAuthorization Ti.Geolocation.' + Geolocation[Ti.Geolocation.locationServicesAuthorization] + '\\n');\r\n\r\n\tvar Media = {};\r\n\tMedia[Ti.Media.CAMERA_AUTHORIZATION_AUTHORIZED] = 'CAMERA_AUTHORIZATION_AUTHORIZED';\r\n\tMedia[Ti.Media.CAMERA_AUTHORIZATION_DENIED] = 'CAMERA_AUTHORIZATION_DENIED';\r\n\tMedia[Ti.Media.CAMERA_AUTHORIZATION_RESTRICTED] = 'CAMERA_AUTHORIZATION_RESTRICTED';\r\n\tMedia[Ti.Media.CAMERA_AUTHORIZATION_NOT_DETERMINED] = 'CAMERA_AUTHORIZATION_NOT_DETERMINED';\r\n\r\n\tconsole.log('Ti.Media.hasCameraPermissions ' + Ti.Media.hasCameraPermissions());\r\n\tconsole.log('Ti.Media.cameraAuthorizationStatus Ti.Media.' + Media[Ti.Media.cameraAuthorizationStatus] + '\\n');\r\n\r\n\tconsole.log('--------------------------------------------------------\\n');\r\n\r\n\tTi.Calendar.requestCalendarPermissions(function(e) {\r\n\t\tconsole.log('Ti.Calendar.requestCalendarPermissions ' + JSON.stringify(e, null, 2));\r\n\t\tconsole.log('Ti.Calendar.requestCalendarPermissions:code (mapped) ' + Calendar[e.code] + '\\n');\r\n\t});\r\n\r\n\tTi.Contacts.requestContactsPermissions(function(e) {\r\n\t\tconsole.log('Ti.Contacts.requestContactsPermissions ' + JSON.stringify(e, null, 2));\r\n\t\tconsole.log('Ti.Contacts.requestContactsPermissions:code (mapped) ' + Contacts[e.code] + '\\n');\r\n\t});\r\n\r\n\tTi.Geolocation.requestLocationPermissions(Ti.Geolocation.AUTHORIZATION_ALWAYS, function(e) {\r\n\t\tconsole.log('Ti.Geolocation.requestLocationPermissions ' + JSON.stringify(e, null, 2));\r\n\t\tconsole.log('Ti.Geolocation.requestLocationPermissions:code (mapped) ' + Geolocation[e.code]);\r\n\t\tconsole.log('Ti.Geolocation.requestLocationPermissions:authorizationStatus ' + Geolocation[e.authorizationStatus] + '\\n');\r\n\t});\r\n\r\n\tTi.Media.requestCameraPermissions(function(e) {\r\n\t\tconsole.log('Ti.Media.requestCameraPermissions ' + JSON.stringify(e, null, 2));\r\n\t\tconsole.log('Ti.Media.requestCameraPermissions:code (mapped) ' + Media[e.code] + '\\n');\r\n\t});\r\n\r\n});\r\n\r\nwin.add(btn);\r\nwin.open();\r\n{code}\r\n\r\nh2. Logs\r\n\r\nh3. Scenario: Deny All\r\n\r\n{code}\r\n[INFO] Ti.Calendar.hasCalendarPermissions false\r\n[INFO] Ti.Calendar.eventsAuthorization Ti.Calendar.AUTHORIZATION_UNKNOWN\r\n[INFO]\r\n[INFO] Ti.Contacts.hasContactsPermissions false\r\n[INFO] Ti.Contacts.contactsAuthorization Ti.Contacts.AUTHORIZATION_UNKNOWN\r\n[INFO]\r\n[INFO] Ti.Geolocation.hasLocationPermissions false\r\n[INFO] Ti.Geolocation.locationServicesAuthorization Ti.Geolocation.AUTHORIZATION_UNKNOWN\r\n[INFO]\r\n[INFO] Ti.Media.hasCameraPermissions false\r\n[INFO] Ti.Media.cameraAuthorizationStatus Ti.Media.CAMERA_AUTHORIZATION_NOT_DETERMINED\r\n[INFO]\r\n[INFO] Ti.Calendar.requestCalendarPermissions {\r\n[INFO] \"success\": false,\r\n[INFO] \"code\": 1\r\n[INFO] }\r\n[INFO] Ti.Calendar.requestCalendarPermissions:code (mapped) AUTHORIZATION_RESTRICTED\r\n[INFO]\r\n[INFO] Ti.Contacts.requestContactsPermissions {\r\n[INFO] \"success\": false,\r\n[INFO] \"error\": \"Access Denied\",\r\n[INFO] \"code\": 100\r\n[INFO] }\r\n[INFO] Ti.Contacts.requestContactsPermissions:code (mapped) undefined\r\n[INFO]\r\n[INFO] Ti.Media.requestCameraPermissions {\r\n[INFO] \"success\": false,\r\n[INFO] \"code\": 1\r\n[INFO] }\r\n[INFO] Ti.Media.requestCameraPermissions:code (mapped) CAMERA_AUTHORIZATION_RESTRICTED\r\n{code}\r\n\r\nBecause of TIMOB-20002 I use the Ti 5.1 Sample App to read the Geolocation callback:\r\n\r\n{code}\r\n[INFO] Ti.Geolocation.requestLocationPermissions {\r\n[INFO] \"success\": false,\r\n[INFO] \"code\": 1,\r\n[INFO] \"authorizationStatus\": 2,\r\n[INFO] \"error\": \"The user is unable to allow access to location.\"\r\n[INFO] }\r\n[INFO] Ti.Geolocation.requestLocationPermissions.code (mapped) Ti.Geolocation.AUTHORIZATION_RESTRICTED\r\n[INFO] Ti.Geolocation.requestLocationPermissions.authorizationStatus (mapped) Ti.Geolocation.AUTHORIZATION_DENIED\r\n{code}\r\n\r\nh3. Scenario: Denied Before\r\n\r\n{code}\r\n[INFO] Ti.Calendar.hasCalendarPermissions false\r\n[INFO] Ti.Calendar.eventsAuthorization Ti.Calendar.AUTHORIZATION_DENIED\r\n[INFO]\r\n[INFO] Ti.Contacts.hasContactsPermissions false\r\n[INFO] Ti.Contacts.contactsAuthorization Ti.Contacts.AUTHORIZATION_DENIED\r\n[INFO]\r\n[INFO] Ti.Geolocation.hasLocationPermissions false\r\n[INFO] Ti.Geolocation.locationServicesAuthorization Ti.Geolocation.AUTHORIZATION_DENIED\r\n[INFO]\r\n[INFO] Ti.Media.hasCameraPermissions false\r\n[INFO] Ti.Media.cameraAuthorizationStatus Ti.Media.CAMERA_AUTHORIZATION_DENIED\r\n[INFO]\r\n[INFO] --------------------------------------------------------\r\n[INFO]\r\n[INFO] Ti.Calendar.requestCalendarPermissions {\r\n[INFO] \"success\": false,\r\n[INFO] \"error\": \"The user has denied access to events in Calendar.\",\r\n[INFO] \"code\": 2\r\n[INFO] }\r\n[INFO] Ti.Calendar.requestCalendarPermissions:code (mapped) AUTHORIZATION_DENIED\r\n[INFO]\r\n[INFO] Ti.Contacts.requestContactsPermissions {\r\n[INFO] \"success\": false,\r\n[INFO] \"error\": \"The user has denied access to the address book\",\r\n[INFO] \"code\": 2\r\n[INFO] }\r\n[INFO] Ti.Contacts.requestContactsPermissions:code (mapped) AUTHORIZATION_DENIED\r\n[INFO]\r\n[INFO] Ti.Media.requestCameraPermissions {\r\n[INFO] \"success\": false,\r\n[INFO] \"code\": 1\r\n[INFO] }\r\n[INFO] Ti.Media.requestCameraPermissions:code (mapped) CAMERA_AUTHORIZATION_RESTRICTED\r\n{code}\r\n\r\nBecause of TIMOB-20002 I use the Ti 5.1 Sample App to read the Geolocation callback:\r\n\r\n{code}\r\n[INFO] Ti.Geolocation.requestLocationPermissions {\r\n[INFO] \"success\": false,\r\n[INFO] \"code\": 1,\r\n[INFO] \"authorizationStatus\": 2,\r\n[INFO] \"error\": \"The user is unable to allow access to location.\"\r\n[INFO] }\r\n[INFO] Ti.Geolocation.requestLocationPermissions.code (mapped) Ti.Geolocation.AUTHORIZATION_RESTRICTED\r\n[INFO] Ti.Geolocation.requestLocationPermissions.authorizationStatus (mapped) Ti.Geolocation.AUTHORIZATION_DENIED\r\n{code}\r\n\r\nh3. Scenario: Allow All\r\n\r\n{code}\r\n[INFO] Ti.Calendar.hasCalendarPermissions false\r\n[INFO] Ti.Calendar.eventsAuthorization Ti.Calendar.AUTHORIZATION_UNKNOWN\r\n[INFO]\r\n[INFO] Ti.Contacts.hasContactsPermissions false\r\n[INFO] Ti.Contacts.contactsAuthorization Ti.Contacts.AUTHORIZATION_UNKNOWN\r\n[INFO]\r\n[INFO] Ti.Geolocation.hasLocationPermissions false\r\n[INFO] Ti.Geolocation.locationServicesAuthorization Ti.Geolocation.AUTHORIZATION_UNKNOWN\r\n[INFO]\r\n[INFO] Ti.Media.hasCameraPermissions false\r\n[INFO] Ti.Media.cameraAuthorizationStatus Ti.Media.CAMERA_AUTHORIZATION_NOT_DETERMINED\r\n[INFO]\r\n[INFO] --------------------------------------------------------\r\n[INFO]\r\n[INFO] Ti.Calendar.requestCalendarPermissions {\r\n[INFO] \"success\": true,\r\n[INFO] \"code\": 0\r\n[INFO] }\r\n[INFO] Ti.Calendar.requestCalendarPermissions:code (mapped) AUTHORIZATION_UNKNOWN\r\n[INFO]\r\n[INFO] Ti.Contacts.requestContactsPermissions {\r\n[INFO] \"success\": true,\r\n[INFO] \"code\": 0\r\n[INFO] }\r\n[INFO] Ti.Contacts.requestContactsPermissions:code (mapped) AUTHORIZATION_UNKNOWN\r\n[INFO]\r\n[INFO] Ti.Media.requestCameraPermissions {\r\n[INFO] \"success\": true,\r\n[INFO] \"code\": 0\r\n[INFO] }\r\n[INFO] Ti.Media.requestCameraPermissions:code (mapped) CAMERA_AUTHORIZATION_NOT_DETERMINED\r\n{code}\r\n\r\nBecause of TIMOB-20002 I use the Ti 5.1 Sample App to read the Geolocation callback:\r\n\r\n{code}\r\n[INFO] Ti.Geolocation.requestLocationPermissions {\r\n[INFO] \"success\": true,\r\n[INFO] \"code\": 0,\r\n[INFO] \"authorizationStatus\": 3,\r\n[INFO] \"error\": \"\"\r\n[INFO] }\r\n[INFO] Ti.Geolocation.requestLocationPermissions.code (mapped) Ti.Geolocation.AUTHORIZATION_UNKNOWN\r\n[INFO] Ti.Geolocation.requestLocationPermissions.authorizationStatus (mapped) Ti.Geolocation.AUTHORIZATION_AUTHORIZED\r\n{code}\r\n\r\nh3. Scenario: Allowed All Before\r\n\r\n{code}\r\n[INFO] Ti.Calendar.hasCalendarPermissions true\r\n[INFO] Ti.Calendar.eventsAuthorization Ti.Calendar.AUTHORIZATION_AUTHORIZED\r\n[INFO]\r\n[INFO] Ti.Contacts.hasContactsPermissions true\r\n[INFO] Ti.Contacts.contactsAuthorization Ti.Contacts.AUTHORIZATION_AUTHORIZED\r\n[INFO]\r\n[INFO] Ti.Geolocation.hasLocationPermissions true\r\n[INFO] Ti.Geolocation.locationServicesAuthorization Ti.Geolocation.AUTHORIZATION_ALWAYS\r\n[INFO]\r\n[INFO] Ti.Media.hasCameraPermissions true\r\n[INFO] Ti.Media.cameraAuthorizationStatus Ti.Media.CAMERA_AUTHORIZATION_AUTHORIZED\r\n[INFO]\r\n[INFO] --------------------------------------------------------\r\n[INFO]\r\n[INFO] Ti.Calendar.requestCalendarPermissions {\r\n[INFO] \"success\": true,\r\n[INFO] \"code\": 0\r\n[INFO] }\r\n[INFO] Ti.Calendar.requestCalendarPermissions:code (mapped) AUTHORIZATION_UNKNOWN\r\n[INFO]\r\n[INFO] Ti.Contacts.requestContactsPermissions {\r\n[INFO] \"success\": true,\r\n[INFO] \"code\": 0\r\n[INFO] }\r\n[INFO] Ti.Contacts.requestContactsPermissions:code (mapped) AUTHORIZATION_UNKNOWN\r\n[INFO]\r\n[INFO] Ti.Media.requestCameraPermissions {\r\n[INFO] \"success\": true,\r\n[INFO] \"code\": 0\r\n[INFO] }\r\n[INFO] Ti.Media.requestCameraPermissions:code (mapped) CAMERA_AUTHORIZATION_NOT_DETERMINED\r\n{code}\r\n\r\nBecause of TIMOB-20002 I use the Ti 5.1 Sample App to read the Geolocation callback:\r\n\r\n{code}\r\n[INFO] Ti.Geolocation.requestLocationPermissions {\r\n[INFO] \"success\": true,\r\n[INFO] \"code\": 0,\r\n[INFO] \"authorizationStatus\": 3,\r\n[INFO] \"error\": \"\"\r\n[INFO] }\r\n[INFO] Ti.Geolocation.requestLocationPermissions.code (mapped) Ti.Geolocation.AUTHORIZATION_UNKNOWN\r\n[INFO] Ti.Geolocation.requestLocationPermissions.authorizationStatus (mapped) Ti.Geolocation.AUTHORIZATION_AUTHORIZED\r\n{code}", "attachment": [], "flagged": false, "summary": "iOS: Differences between new permission request responses", "creator": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "subtasks": [], "reporter": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "environment": "SDK 5.1.0.v20151116104422", "closedSprints": [ { "id": 543, "state": "closed", "name": "2015 Sprint 26 SDK", "startDate": "2015-12-19T01:30:23.690Z", "endDate": "2016-01-02T01:30:00.000Z", "completeDate": "2016-01-04T02:30:59.966Z", "originBoardId": 114 } ], "comment": { "comments": [ { "id": "371889", "author": { "name": "ssombhatla", "key": "ssombhatla", "displayName": "Srikanth Sombhatla", "active": false, "timeZone": "Asia/Singapore" }, "body": "PR: https://github.com/appcelerator/titanium_mobile/pull/7528\r\n\r\nSee my comments for each bullet item:\r\n\r\n*Unlike the others, the callback for requestLocationPermissions() is only called the first time. You have to force close and then re-open the app for it to work again.*\r\nAlready fixed in TIMOB-20002\r\n\r\n*The response for requestLocationPermissions also has authorizationStatus, which would be very useful to have in the response for the others as well.*\r\nThis needs to get in parity with Android. Will investigate and do as a separate ticket TIMOB-20084 \r\n\r\n*On success, the response for requestLocationPermissions has an empty string for error where it should either have a message or be undefined.*\r\nSriks: Already fixed in TIMOB-20002\r\n\r\n*When unknown, requestContactsPermissions has a not very helpful Access Denied error instead of just being undefined like Calendar and Camera.*\r\nFixed in this ticket. Changed to a message similar to other permissions: \"The user has denied access to the address book\"\r\n\r\n*Unless permission was granted, the error for requestLocationPermissions is always The user is unable to allow access to location., which is not very helpful or even misleading since the user is perfectly able, he just denied permission to the app. Calendar and Contacts have better error messages.*\r\nAlready fixed in TIMOB-20002\r\n\r\n*When denied, the response for requestCameraPermissions has no error like the others.*\r\nFixed in this ticket. Same is fixed for Calendar.\r\n\r\n*I have no idea where code comes from but if I deny it (probably by coincidence) correctly maps to AUTHORIZATION_DENIED for Calendar and Contacts. Would be helpful to have the meaning of this code documented.*\r\nYes it is coincidence! code in iOS is framework specific. But the docs says 0 is for success and any non zero is for failure. I will create a separate ticket for this since each framework returns a different code and not in parity with Android.", "updateAuthor": { "name": "ssombhatla", "key": "ssombhatla", "displayName": "Srikanth Sombhatla", "active": false, "timeZone": "Asia/Singapore" }, "created": "2015-12-02T08:02:38.000+0000", "updated": "2015-12-02T08:34:25.000+0000" }, { "id": "371896", "author": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "body": "Awesome work [~ssombhatla]. It's the details that make a great product!", "updateAuthor": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "created": "2015-12-02T08:26:12.000+0000", "updated": "2015-12-02T08:26:12.000+0000" }, { "id": "372110", "author": { "name": "apetkov", "key": "apetkov", "displayName": "Angel Petkov", "active": true, "timeZone": "America/Los_Angeles" }, "body": "Reviewed , there were some issues with TIMOB-20002, however I've left a comment there and 2 new PRs. Everything else looks good. Thanks [~ssombhatla]! ", "updateAuthor": { "name": "apetkov", "key": "apetkov", "displayName": "Angel Petkov", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2015-12-03T23:24:28.000+0000", "updated": "2015-12-03T23:24:28.000+0000" }, { "id": "373069", "author": { "name": "cng", "key": "cng", "displayName": "Chee Kiat Ng", "active": false, "timeZone": "America/Los_Angeles" }, "body": "Not sure why this was resolved without a PR being merged. Please address comments in https://github.com/appcelerator/titanium_mobile/pull/7528", "updateAuthor": { "name": "cng", "key": "cng", "displayName": "Chee Kiat Ng", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2015-12-16T01:59:46.000+0000", "updated": "2015-12-16T01:59:46.000+0000" }, { "id": "373554", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "[~ssombhatla] PR on master merged, please provide a backport for 5_2_X to make this change available in 5.2.0.", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2015-12-28T13:32:19.000+0000", "updated": "2015-12-28T13:32:19.000+0000" }, { "id": "373589", "author": { "name": "ssombhatla", "key": "ssombhatla", "displayName": "Srikanth Sombhatla", "active": false, "timeZone": "Asia/Singapore" }, "body": "[~hansknoechel]\r\n5_2_X backport PR https://github.com/appcelerator/titanium_mobile/pull/7603", "updateAuthor": { "name": "ssombhatla", "key": "ssombhatla", "displayName": "Srikanth Sombhatla", "active": false, "timeZone": "Asia/Singapore" }, "created": "2015-12-29T04:08:31.000+0000", "updated": "2015-12-29T04:08:31.000+0000" }, { "id": "373599", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "Backport merged, resolving ticket!", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2015-12-29T10:34:28.000+0000", "updated": "2015-12-29T10:34:28.000+0000" }, { "id": "376416", "author": { "name": "ewieber", "key": "ewieber", "displayName": "Eric Wieber", "active": false, "timeZone": "America/Los_Angeles" }, "body": "Verified fixed, using:\r\n\r\nMacOS 10.11.3 (15D21)\r\nStudio 4.5.0.201602050824\r\nTi SDK 5.2.0.v20160208101502\r\nAppc NPM 4.2.3-2\r\nAppc CLI 5.2.0-249\r\nAlloy 1.7.33\r\nXcode 7.2 (7C68)\r\n\r\nAs stated by Srikanth, many issues from this ticket are addressed elsewhere. Tested with the sample code provided. All proper messages were displayed with allowing or denying permissions. Permissions now are accessed and display similar messaging.", "updateAuthor": { "name": "ewieber", "key": "ewieber", "displayName": "Eric Wieber", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2016-02-10T00:52:01.000+0000", "updated": "2016-02-10T00:52:01.000+0000" } ], "maxResults": 8, "total": 8, "startAt": 0 } } }