{ "id": "154687", "key": "TIMOB-20320", "fields": { "issuetype": { "id": "4", "description": "An improvement or enhancement to an existing feature or task.", "name": "Improvement", "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": "17706", "name": "Release 5.4.0", "archived": false, "released": true, "releaseDate": "2016-08-11" }, { "id": "18141", "name": "Release 5.3.2", "archived": false, "released": true, "releaseDate": "2017-02-06" } ], "resolution": { "id": "1", "description": "A fix for this issue is checked into the tree and tested.", "name": "Fixed" }, "resolutiondate": "2016-04-19T02:39:33.000+0000", "created": "2016-02-03T17:22:12.000+0000", "priority": { "name": "High", "id": "2" }, "labels": [ "permissions" ], "versions": [], "issuelinks": [ { "id": "50533", "type": { "id": "10002", "name": "Duplicate", "inward": "is duplicated by", "outward": "duplicates" }, "inwardIssue": { "id": "154741", "key": "AC-603", "fields": { "summary": "Intent for calling app permissions (Marshmellow)", "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" } }, "issuetype": { "id": "2", "description": "A new feature of the product, which has yet to be developed.", "name": "New Feature", "subtask": false } } } }, { "id": "51456", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "outwardIssue": { "id": "153968", "key": "TIMOB-20208", "fields": { "summary": "Android 6.0: Issues with writing to file", "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": "Critical", "id": "1" }, "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false } } } }, { "id": "51503", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "outwardIssue": { "id": "155598", "key": "TIMOB-20544", "fields": { "summary": "Align permission methods Ti.Media.AudioRecorder with the others", "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": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false } } } }, { "id": "51504", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "outwardIssue": { "id": "62754", "key": "TIMOB-2122", "fields": { "summary": "Android: Implement Video Recording", "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": "50446", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "inwardIssue": { "id": "153825", "key": "TIMOB-20144", "fields": { "summary": "Android 6.0: allow native modules to get notified about runtime permission granting results", "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": "4", "description": "An improvement or enhancement to an existing feature or task.", "name": "Improvement", "subtask": false } } } } ], "assignee": { "name": "hpham", "key": "hpham", "displayName": "Hieu Pham", "active": true, "timeZone": "America/Los_Angeles" }, "updated": "2016-07-04T08:33:29.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": "We need a generic method to request permissions that our own APIs do not use.\r\n\r\nI know we've discussed this and thought this was best to leave this to the modules that require them, but there are multiple reasons for having a generic one instead:\r\n\r\n* So that module doesn't come up with different ways (method name, method arguments, callback/event response and payload)\r\n* So that developers don't need to rely on maintainers of 3rd party modules to update their modules to support Android 6.0 runtime permissions\r\n\r\nAlso see the discussion in TIMOB-20144", "attachment": [], "flagged": false, "summary": "Android: Provide generic requestPermission(s) method", "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": null, "closedSprints": [ { "id": 618, "state": "closed", "name": "2016 Sprint 08 SDK", "startDate": "2016-04-09T00:30:18.262Z", "endDate": "2016-04-23T00:30:00.000Z", "completeDate": "2016-04-25T02:38:28.511Z", "originBoardId": 114 } ], "comment": { "comments": [ { "id": "375890", "author": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "body": "/cc [~titanium@webmasterei-hamburg.de]", "updateAuthor": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "created": "2016-02-03T17:22:27.000+0000", "updated": "2016-02-03T17:22:27.000+0000" }, { "id": "375897", "author": { "name": "titanium@webmasterei-hamburg.de", "key": "titanium@webmasterei-hamburg.de", "displayName": "Rainer Schleevoigt", "active": true, "timeZone": "Europe/Berlin" }, "body": "+1 (for i.e. titutorial.audiorecorder)", "updateAuthor": { "name": "titanium@webmasterei-hamburg.de", "key": "titanium@webmasterei-hamburg.de", "displayName": "Rainer Schleevoigt", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-02-03T18:14:52.000+0000", "updated": "2016-02-03T18:14:52.000+0000" }, { "id": "376521", "author": { "name": "titanium@webmasterei-hamburg.de", "key": "titanium@webmasterei-hamburg.de", "displayName": "Rainer Schleevoigt", "active": true, "timeZone": "Europe/Berlin" }, "body": "I think the best way is to make a PR for TiBaseActivity for extending perfmissions.", "updateAuthor": { "name": "titanium@webmasterei-hamburg.de", "key": "titanium@webmasterei-hamburg.de", "displayName": "Rainer Schleevoigt", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-02-10T15:02:16.000+0000", "updated": "2016-02-12T07:13:41.000+0000" }, { "id": "377979", "author": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "body": "We could integrate this module:\r\nhttps://github.com/stgrosshh/tipermissions", "updateAuthor": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "created": "2016-02-26T14:12:10.000+0000", "updated": "2016-02-26T14:12:10.000+0000" }, { "id": "378040", "author": { "name": "titanium@webmasterei-hamburg.de", "key": "titanium@webmasterei-hamburg.de", "displayName": "Rainer Schleevoigt", "active": true, "timeZone": "Europe/Berlin" }, "body": "@fokke Currently we (Stefan and me) test and improve the module. Though the coder needs a special titanium.jar in his SDK5.2.0.GA. This jar contains the PR and can find here: https://github.com/AppWerft/Tierstimmenarchiv/blob/master/modules/android/titanium.jar\r\n\r\nscreenshot:\r\n!http://i.imgur.com/LUPmlPN.jpg!\r\n\r\n", "updateAuthor": { "name": "titanium@webmasterei-hamburg.de", "key": "titanium@webmasterei-hamburg.de", "displayName": "Rainer Schleevoigt", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-02-27T06:54:52.000+0000", "updated": "2016-02-27T06:58:32.000+0000" }, { "id": "378044", "author": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "body": "So it requires a change in the Titanium SDK. Could you open up the source for that change as well?", "updateAuthor": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "created": "2016-02-27T10:10:44.000+0000", "updated": "2016-02-27T10:10:44.000+0000" }, { "id": "378045", "author": { "name": "titanium@webmasterei-hamburg.de", "key": "titanium@webmasterei-hamburg.de", "displayName": "Rainer Schleevoigt", "active": true, "timeZone": "Europe/Berlin" }, "body": "https://github.com/appcelerator/titanium_mobile/pull/7778", "updateAuthor": { "name": "titanium@webmasterei-hamburg.de", "key": "titanium@webmasterei-hamburg.de", "displayName": "Rainer Schleevoigt", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-02-27T10:27:41.000+0000", "updated": "2016-02-27T10:27:41.000+0000" }, { "id": "378275", "author": { "name": "buder", "key": "buder", "displayName": "Jörgen Buder", "active": true, "timeZone": "Europe/Berlin" }, "body": "Hi\r\n\r\nWe are working to support permissions in our Android 6.0 support for our client as we speak, do you know when this will be available in the nightly builds? It seems you are working actively on it right now? And it is so much easier for us to use your nightly build than to patch the SDK our selves..\r\n\r\nThanks", "updateAuthor": { "name": "buder", "key": "buder", "displayName": "Jörgen Buder", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-03-01T10:38:19.000+0000", "updated": "2016-03-01T10:38:19.000+0000" }, { "id": "378277", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "[~buder], the PR is not merged,but the Android team is currently reviewing it. As there are many other features and issues to take care about, we cannot provide a concrete timeline for now, but will keep this ticket updated.", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-03-01T10:43:55.000+0000", "updated": "2016-03-01T10:46:12.000+0000" }, { "id": "378278", "author": { "name": "titanium@webmasterei-hamburg.de", "key": "titanium@webmasterei-hamburg.de", "displayName": "Rainer Schleevoigt", "active": true, "timeZone": "Europe/Berlin" }, "body": "@jörgen for quick solution I can send you the new android.jar for copying into android folder of your 5.2.0.GA folder.", "updateAuthor": { "name": "titanium@webmasterei-hamburg.de", "key": "titanium@webmasterei-hamburg.de", "displayName": "Rainer Schleevoigt", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-03-01T11:01:30.000+0000", "updated": "2016-03-01T11:01:30.000+0000" }, { "id": "378287", "author": { "name": "buder", "key": "buder", "displayName": "Jörgen Buder", "active": true, "timeZone": "Europe/Berlin" }, "body": "or maybe you need better transfer ? Drop box?", "updateAuthor": { "name": "buder", "key": "buder", "displayName": "Jörgen Buder", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-03-01T12:13:06.000+0000", "updated": "2016-03-01T12:13:06.000+0000" }, { "id": "378290", "author": { "name": "titanium@webmasterei-hamburg.de", "key": "titanium@webmasterei-hamburg.de", "displayName": "Rainer Schleevoigt", "active": true, "timeZone": "Europe/Berlin" }, "body": "You find it here: https://github.com/AppWerft/Tierstimmenarchiv/tree/master/modules/android You email doesn't work.", "updateAuthor": { "name": "titanium@webmasterei-hamburg.de", "key": "titanium@webmasterei-hamburg.de", "displayName": "Rainer Schleevoigt", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-03-01T12:47:44.000+0000", "updated": "2016-03-01T12:48:21.000+0000" }, { "id": "378291", "author": { "name": "buder", "key": "buder", "displayName": "Jörgen Buder", "active": true, "timeZone": "Europe/Berlin" }, "body": "Thank you so much..\r\n\r\n", "updateAuthor": { "name": "buder", "key": "buder", "displayName": "Jörgen Buder", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-03-01T13:00:43.000+0000", "updated": "2016-03-01T13:00:43.000+0000" }, { "id": "379683", "author": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "body": "[~morahman] just came up with another important use case for such a generic method.\r\n\r\nOn Android, it would allow developers to ask for all permissions the app needs at once.", "updateAuthor": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "created": "2016-03-14T19:19:57.000+0000", "updated": "2016-03-14T19:19:57.000+0000" }, { "id": "381846", "author": { "name": "titanium@webmasterei-hamburg.de", "key": "titanium@webmasterei-hamburg.de", "displayName": "Rainer Schleevoigt", "active": true, "timeZone": "Europe/Berlin" }, "body": "With the new module you can requests all permissions in one dialog. First parameter is array of permissions.\r\nAndroid6.0 has a bug: although permissions are confirmed the dialog appears. In Android 6.0.1 it is fixed. As workaround we suggest a JS-module ti.permissions: https://github.com/AppWerft/Tierstimmenarchiv/blob/master/Resources/vendor/permissions.js\r\n\r\n", "updateAuthor": { "name": "titanium@webmasterei-hamburg.de", "key": "titanium@webmasterei-hamburg.de", "displayName": "Rainer Schleevoigt", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-04-06T08:37:35.000+0000", "updated": "2016-04-06T08:43:12.000+0000" }, { "id": "382771", "author": { "name": "hpham", "key": "hpham", "displayName": "Hieu Pham", "active": true, "timeZone": "America/Los_Angeles" }, "body": "refactored PR: https://github.com/appcelerator/titanium_mobile/pull/7948", "updateAuthor": { "name": "hpham", "key": "hpham", "displayName": "Hieu Pham", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2016-04-14T23:58:07.000+0000", "updated": "2016-04-14T23:58:07.000+0000" }, { "id": "382809", "author": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "body": "[~hpham] could you add a sample of how this would work for the developer?", "updateAuthor": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "created": "2016-04-15T08:28:43.000+0000", "updated": "2016-04-15T08:28:43.000+0000" }, { "id": "382810", "author": { "name": "titanium@webmasterei-hamburg.de", "key": "titanium@webmasterei-hamburg.de", "displayName": "Rainer Schleevoigt", "active": true, "timeZone": "Europe/Berlin" }, "body": "Yes, in most cases (compatibility with iOS and bug in A6.0.0) you need this JS-wrapper:\r\n\r\n{code:javascript}\r\nvar TiPermissions = require('ti.permissions');\r\nexports.requestPermissions = function(_permissions, _callback) {\r\n\tif (Ti.Platform.osname != 'android') {\r\n\t\t_callback(true);\r\n\t\treturn;\r\n\t}\r\nvar permissions = (Array.isArray(_permissions) ? _permissions : [_permissions]).map(function(perm) {\r\n\t\treturn (perm.match(/^android\\.permission\\./)) ? perm : 'android.permission.' + perm;\r\n\t});\r\n\tvar grantedpermissions = 0;\r\n\tpermissions.forEach(function(perm) {\r\n\t\tif (TiPermissions.hasPermission(perm)) \r\n\t\t\tgrantedpermissions++;\r\n\t\t\r\n\t\tif (grantedpermissions == permissions.length)\r\n\t\t\t_callback(true);\r\n\t});\r\n\tif (grantedpermissions < permissions.length) {\r\n\t\tTiPermissions.requestPermissions(permissions, function(_e) {\r\n\t\t\t_callback(_e.success);\r\n\t\t});\r\n\t}\r\n};\r\n{code}\r\n\r\nNow you can use in app:\r\n\r\n{code:javascript}\r\nrequire('lib/tipermissions').requestPermissions(['WRITE_EXTERNAL_STORAGE','RECORD_AUDIO'],function(){\r\n if (arguments[0]==true) {\r\n // do critical things\r\n} else alert('you must confirm to enjoy the fancy shit')\r\n});\r\n{code}\r\n\r\n", "updateAuthor": { "name": "titanium@webmasterei-hamburg.de", "key": "titanium@webmasterei-hamburg.de", "displayName": "Rainer Schleevoigt", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-04-15T08:46:21.000+0000", "updated": "2016-04-15T08:51:39.000+0000" }, { "id": "382811", "author": { "name": "titanium@webmasterei-hamburg.de", "key": "titanium@webmasterei-hamburg.de", "displayName": "Rainer Schleevoigt", "active": true, "timeZone": "Europe/Berlin" }, "body": "The formatter makes trouble or I don't know how.", "updateAuthor": { "name": "titanium@webmasterei-hamburg.de", "key": "titanium@webmasterei-hamburg.de", "displayName": "Rainer Schleevoigt", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-04-15T08:50:09.000+0000", "updated": "2016-04-15T08:50:09.000+0000" }, { "id": "382812", "author": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "body": "[~titanium@webmasterei-hamburg.de] thanks but I meant how the builtin support [~hpham] is adding will be used.", "updateAuthor": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "created": "2016-04-15T09:23:50.000+0000", "updated": "2016-04-15T09:23:50.000+0000" }, { "id": "383025", "author": { "name": "hpham", "key": "hpham", "displayName": "Hieu Pham", "active": true, "timeZone": "America/Los_Angeles" }, "body": "Link to PR again: https://github.com/appcelerator/titanium_mobile/pull/7948\r\nImplemented 2 new methods hasPermission() and requestPermissions(). (please read documentation in the PR for usage).\r\nSample usage code:\r\n{code}\r\nvar cameraPermission = \"android.permission.CAMERA\";\r\nvar storagePermission = \"android.permission.READ_EXTERNAL_STORAGE\";\r\nvar hasCameraPerm = Ti.Android.hasPermission(cameraPermission);\r\nvar hasStoragePerm = Ti.Android.hasPermission(storagePermission);\r\nvar permissionsToRequest = [];\r\nif (!hasCameraPerm) {\r\n\tpermissionsToRequest.push(cameraPermission);\r\n}\r\nif (!hasStoragePerm) {\r\n\tpermissionsToRequest.push(storagePermission);\r\n}\r\nif (permissionsToRequest.length > 0) {\r\n\tTi.Android.requestPermissions(permissionsToRequest, function(e) {\r\n \tif (e.success) {\r\n \t\tTi.API.info(\"SUCCESS\");\r\n \t} else {\r\n \t\tTi.API.info(\"ERROR: \" + e.error);\r\n \t}\r\n\t});\r\n}\r\n{code}", "updateAuthor": { "name": "hpham", "key": "hpham", "displayName": "Hieu Pham", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2016-04-18T22:46:17.000+0000", "updated": "2016-04-18T22:49:41.000+0000" }, { "id": "383286", "author": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "body": "We could also use this library: https://github.com/00ec454/Ask", "updateAuthor": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "created": "2016-04-20T08:33:46.000+0000", "updated": "2016-04-20T08:33:46.000+0000" }, { "id": "383287", "author": { "name": "msamah", "key": "msamah", "displayName": "Ashraf Abu", "active": false, "timeZone": "Asia/Singapore" }, "body": "I'm generally not in favour of adding in an external library if possible to reduce the complexity of dependencies if this can be done without an external library.", "updateAuthor": { "name": "msamah", "key": "msamah", "displayName": "Ashraf Abu", "active": false, "timeZone": "Asia/Singapore" }, "created": "2016-04-20T08:40:45.000+0000", "updated": "2016-04-20T08:40:45.000+0000" }, { "id": "383288", "author": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "body": "Agree", "updateAuthor": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "created": "2016-04-20T08:49:12.000+0000", "updated": "2016-04-20T08:49:12.000+0000" }, { "id": "388336", "author": { "name": "lchoudhary", "key": "lchoudhary", "displayName": "Lokesh Choudhary", "active": true, "timeZone": "America/Los_Angeles" }, "body": "Verified the implementation of the 2 methods {{hasPermission()}} & {{requestPermissions()}}.\r\nAccording to docs in the PR, permissions should be included in the android manifest for the successful granting of the required permissions.\r\n\r\nClosing.\r\n\r\nEnvironment:\r\nAppc Studio : 4.6.0.201605201934\r\nTi SDK : 5.4.0.v20160608165242\r\nTi CLI : 5.0.8\r\nAlloy : 1.8.7\r\nMAC El Capitan : 10.11.4\r\nAppc NPM : 4.2.7-2\r\nAppc CLI : 5.4.0-15\r\nNode: 4.4.4\r\nNexus 6 - Android 6.0.0\r\n", "updateAuthor": { "name": "lchoudhary", "key": "lchoudhary", "displayName": "Lokesh Choudhary", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2016-06-14T20:53:33.000+0000", "updated": "2016-06-14T20:53:33.000+0000" }, { "id": "389872", "author": { "name": "ptquang86", "key": "ptquang86", "displayName": "Quang Pham", "active": true, "timeZone": "Asia/Jakarta" }, "updateAuthor": { "name": "ptquang86", "key": "ptquang86", "displayName": "Quang Pham", "active": true, "timeZone": "Asia/Jakarta" }, "created": "2016-07-04T07:08:02.000+0000", "updated": "2016-07-04T07:08:02.000+0000" }, { "id": "389873", "author": { "name": "ptquang86", "key": "ptquang86", "displayName": "Quang Pham", "active": true, "timeZone": "Asia/Jakarta" }, "body": "Environment:\r\nTitanium SDK 5.4.0.v20160703211246\r\nOSX\r\nNexus 7 2013 - Android 6.0.1", "updateAuthor": { "name": "ptquang86", "key": "ptquang86", "displayName": "Quang Pham", "active": true, "timeZone": "Asia/Jakarta" }, "created": "2016-07-04T07:09:37.000+0000", "updated": "2016-07-04T07:09:37.000+0000" }, { "id": "389874", "author": { "name": "msamah", "key": "msamah", "displayName": "Ashraf Abu", "active": false, "timeZone": "Asia/Singapore" }, "body": "[~ptquang86]\r\nWhat do you mean by being unable to click the Allow Button?\r\nDo you have a screenshot?", "updateAuthor": { "name": "msamah", "key": "msamah", "displayName": "Ashraf Abu", "active": false, "timeZone": "Asia/Singapore" }, "created": "2016-07-04T07:13:15.000+0000", "updated": "2016-07-04T07:13:15.000+0000" }, { "id": "389884", "author": { "name": "ptquang86", "key": "ptquang86", "displayName": "Quang Pham", "active": true, "timeZone": "Asia/Jakarta" }, "body": "I mean the button Allow is freeze, not click able\r\nhttps://goo.gl/photos/vpsDg7HagD4KGNZKA\r\nIt works on Genymotion", "updateAuthor": { "name": "ptquang86", "key": "ptquang86", "displayName": "Quang Pham", "active": true, "timeZone": "Asia/Jakarta" }, "created": "2016-07-04T08:11:26.000+0000", "updated": "2016-07-04T08:11:26.000+0000" }, { "id": "389886", "author": { "name": "msamah", "key": "msamah", "displayName": "Ashraf Abu", "active": false, "timeZone": "Asia/Singapore" }, "body": "Thanks for the photo.\r\nBased on the information, I do not think there is any bug or fault in the Titanium SDK. What's being done is simply calling the native Android method to bring up that requestPermission dialog. Nothing special is being done.\r\n\r\nCould it be that the device has some issues? Do other apps that require permission also have that button frozen? This seems very odd.", "updateAuthor": { "name": "msamah", "key": "msamah", "displayName": "Ashraf Abu", "active": false, "timeZone": "Asia/Singapore" }, "created": "2016-07-04T08:20:48.000+0000", "updated": "2016-07-04T08:20:48.000+0000" }, { "id": "389887", "author": { "name": "titanium@webmasterei-hamburg.de", "key": "titanium@webmasterei-hamburg.de", "displayName": "Rainer Schleevoigt", "active": true, "timeZone": "Europe/Berlin" }, "body": "@ashraf You are right. This is not in relation to Titanium. The module only opens a \"native\" system dialog. Maybe a problem with Genymotion. I'm only work on devices and never seen this issue.", "updateAuthor": { "name": "titanium@webmasterei-hamburg.de", "key": "titanium@webmasterei-hamburg.de", "displayName": "Rainer Schleevoigt", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-07-04T08:23:40.000+0000", "updated": "2016-07-04T08:23:40.000+0000" }, { "id": "389889", "author": { "name": "ptquang86", "key": "ptquang86", "displayName": "Quang Pham", "active": true, "timeZone": "Asia/Jakarta" }, "body": "yes, this is an issue of my device. I tested with facebook and this happened.\r\nthank you :)", "updateAuthor": { "name": "ptquang86", "key": "ptquang86", "displayName": "Quang Pham", "active": true, "timeZone": "Asia/Jakarta" }, "created": "2016-07-04T08:30:11.000+0000", "updated": "2016-07-04T08:30:11.000+0000" }, { "id": "389891", "author": { "name": "msamah", "key": "msamah", "displayName": "Ashraf Abu", "active": false, "timeZone": "Asia/Singapore" }, "body": "[~ptquang86] (y)\r\n\r\nThanks [~titanium@webmasterei-hamburg.de]", "updateAuthor": { "name": "msamah", "key": "msamah", "displayName": "Ashraf Abu", "active": false, "timeZone": "Asia/Singapore" }, "created": "2016-07-04T08:33:29.000+0000", "updated": "2016-07-04T08:33:29.000+0000" } ], "maxResults": 41, "total": 41, "startAt": 0 } } }