{"action":"created","issue":{"url":"https://api.github.com/repos/syncthing/syncthing-android/issues/1170","repository_url":"https://api.github.com/repos/syncthing/syncthing-android","labels_url":"https://api.github.com/repos/syncthing/syncthing-android/issues/1170/labels{/name}","comments_url":"https://api.github.com/repos/syncthing/syncthing-android/issues/1170/comments","events_url":"https://api.github.com/repos/syncthing/syncthing-android/issues/1170/events","html_url":"https://github.com/syncthing/syncthing-android/pull/1170","id":335707221,"node_id":"MDExOlB1bGxSZXF1ZXN0MTk3MzM3ODQ4","number":1170,"title":"Implement proper permission handling using SAF (fixes #1160)","user":{"login":"Catfriend1","id":16361913,"node_id":"MDQ6VXNlcjE2MzYxOTEz","avatar_url":"https://avatars1.githubusercontent.com/u/16361913?v=4","gravatar_id":"","url":"https://api.github.com/users/Catfriend1","html_url":"https://github.com/Catfriend1","followers_url":"https://api.github.com/users/Catfriend1/followers","following_url":"https://api.github.com/users/Catfriend1/following{/other_user}","gists_url":"https://api.github.com/users/Catfriend1/gists{/gist_id}","starred_url":"https://api.github.com/users/Catfriend1/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Catfriend1/subscriptions","organizations_url":"https://api.github.com/users/Catfriend1/orgs","repos_url":"https://api.github.com/users/Catfriend1/repos","events_url":"https://api.github.com/users/Catfriend1/events{/privacy}","received_events_url":"https://api.github.com/users/Catfriend1/received_events","type":"User","site_admin":false},"labels":[{"id":82100197,"node_id":"MDU6TGFiZWw4MjEwMDE5Nw==","url":"https://api.github.com/repos/syncthing/syncthing-android/labels/enhancement","name":"enhancement","color":"84b6eb","default":true}],"state":"closed","locked":false,"assignee":{"login":"Catfriend1","id":16361913,"node_id":"MDQ6VXNlcjE2MzYxOTEz","avatar_url":"https://avatars1.githubusercontent.com/u/16361913?v=4","gravatar_id":"","url":"https://api.github.com/users/Catfriend1","html_url":"https://github.com/Catfriend1","followers_url":"https://api.github.com/users/Catfriend1/followers","following_url":"https://api.github.com/users/Catfriend1/following{/other_user}","gists_url":"https://api.github.com/users/Catfriend1/gists{/gist_id}","starred_url":"https://api.github.com/users/Catfriend1/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Catfriend1/subscriptions","organizations_url":"https://api.github.com/users/Catfriend1/orgs","repos_url":"https://api.github.com/users/Catfriend1/repos","events_url":"https://api.github.com/users/Catfriend1/events{/privacy}","received_events_url":"https://api.github.com/users/Catfriend1/received_events","type":"User","site_admin":false},"assignees":[{"login":"Catfriend1","id":16361913,"node_id":"MDQ6VXNlcjE2MzYxOTEz","avatar_url":"https://avatars1.githubusercontent.com/u/16361913?v=4","gravatar_id":"","url":"https://api.github.com/users/Catfriend1","html_url":"https://github.com/Catfriend1","followers_url":"https://api.github.com/users/Catfriend1/followers","following_url":"https://api.github.com/users/Catfriend1/following{/other_user}","gists_url":"https://api.github.com/users/Catfriend1/gists{/gist_id}","starred_url":"https://api.github.com/users/Catfriend1/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Catfriend1/subscriptions","organizations_url":"https://api.github.com/users/Catfriend1/orgs","repos_url":"https://api.github.com/users/Catfriend1/repos","events_url":"https://api.github.com/users/Catfriend1/events{/privacy}","received_events_url":"https://api.github.com/users/Catfriend1/received_events","type":"User","site_admin":false}],"milestone":{"url":"https://api.github.com/repos/syncthing/syncthing-android/milestones/4","html_url":"https://github.com/syncthing/syncthing-android/milestone/4","labels_url":"https://api.github.com/repos/syncthing/syncthing-android/milestones/4/labels","id":3422213,"node_id":"MDk6TWlsZXN0b25lMzQyMjIxMw==","number":4,"title":"syncthing_v0.14.49","description":null,"creator":{"login":"Catfriend1","id":16361913,"node_id":"MDQ6VXNlcjE2MzYxOTEz","avatar_url":"https://avatars1.githubusercontent.com/u/16361913?v=4","gravatar_id":"","url":"https://api.github.com/users/Catfriend1","html_url":"https://github.com/Catfriend1","followers_url":"https://api.github.com/users/Catfriend1/followers","following_url":"https://api.github.com/users/Catfriend1/following{/other_user}","gists_url":"https://api.github.com/users/Catfriend1/gists{/gist_id}","starred_url":"https://api.github.com/users/Catfriend1/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Catfriend1/subscriptions","organizations_url":"https://api.github.com/users/Catfriend1/orgs","repos_url":"https://api.github.com/users/Catfriend1/repos","events_url":"https://api.github.com/users/Catfriend1/events{/privacy}","received_events_url":"https://api.github.com/users/Catfriend1/received_events","type":"User","site_admin":false},"open_issues":0,"closed_issues":3,"state":"open","created_at":"2018-06-13T15:12:50Z","updated_at":"2018-07-24T20:44:08Z","due_on":null,"closed_at":null},"comments":14,"created_at":"2018-06-26T08:16:21Z","updated_at":"2018-08-03T15:42:54Z","closed_at":"2018-07-15T21:34:26Z","author_association":"CONTRIBUTOR","pull_request":{"url":"https://api.github.com/repos/syncthing/syncthing-android/pulls/1170","html_url":"https://github.com/syncthing/syncthing-android/pull/1170","diff_url":"https://github.com/syncthing/syncthing-android/pull/1170.diff","patch_url":"https://github.com/syncthing/syncthing-android/pull/1170.patch"},"body":"Purpose\r\nImproves the FolderActivity UI when creating or editing a syncthing folder making it clear to the user why a folder can or cannot be written to.\r\nImplements the Storage Access Framework API available on Android 5+ (API level 21) and gracefully falls back to the existing FolderPickerActivity implementation if the app runs on a lower API level.\r\nIntends to fix issue #1160 by creating the \".stfolder\" on folder creation properly using the Storage Access Framework on API level 21+. This helps users a lot creating sendonly folders for backup means (yes I know and fully support it is SyncThing and NOT BackupThing).\r\n\r\nSAF-related: If a folder can be written to or not by the syncthing binary is intentionally implemented by using the shell instead of SAF as SAF cannot tell us if the native syncthing binary has access to something or not after the user granted permission by making his folder selection on the SAF UI. This also makes the new code backwards compatible as checking write permission using the shell is also available in API levels < 21.\r\n\r\nThe \"Documents\" Library shown in Android's native directory picker (SAF UI) is properly supported to be converted to an absolute unix path since commit https://github.com/syncthing/syncthing-android/pull/1170/commits/c786e353ef5e09dc8a7b6cf5352be04f01394365 .\r\n\r\nRelated Issue\r\n#453 We should close this issue as \"invalid\" as implementing this would a) risk user data on misusage, b) is a niche use case syncing the /data/ partition from Android and c) will get in our way implementing (or in a future android version maybe HAVING to implement) more SAF use in the code \"when Google likes us to do so\".\r\n\r\nTesting\r\nVerified working on device lg-h815 running Android 7.1.2 at https://github.com/syncthing/syncthing-android/pull/1170/commits/9ee829afaf554eaf527a02a2341210f53fa5d81e .\r\n\r\nVerified working on device samsung-i9100 running Android 8.1 https://github.com/syncthing/syncthing-android/pull/1170/commits/9ee829afaf554eaf527a02a2341210f53fa5d81e ."},"comment":{"url":"https://api.github.com/repos/syncthing/syncthing-android/issues/comments/410293573","html_url":"https://github.com/syncthing/syncthing-android/pull/1170#issuecomment-410293573","issue_url":"https://api.github.com/repos/syncthing/syncthing-android/issues/1170","id":410293573,"node_id":"MDEyOklzc3VlQ29tbWVudDQxMDI5MzU3Mw==","user":{"login":"Catfriend1","id":16361913,"node_id":"MDQ6VXNlcjE2MzYxOTEz","avatar_url":"https://avatars1.githubusercontent.com/u/16361913?v=4","gravatar_id":"","url":"https://api.github.com/users/Catfriend1","html_url":"https://github.com/Catfriend1","followers_url":"https://api.github.com/users/Catfriend1/followers","following_url":"https://api.github.com/users/Catfriend1/following{/other_user}","gists_url":"https://api.github.com/users/Catfriend1/gists{/gist_id}","starred_url":"https://api.github.com/users/Catfriend1/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Catfriend1/subscriptions","organizations_url":"https://api.github.com/users/Catfriend1/orgs","repos_url":"https://api.github.com/users/Catfriend1/repos","events_url":"https://api.github.com/users/Catfriend1/events{/privacy}","received_events_url":"https://api.github.com/users/Catfriend1/received_events","type":"User","site_admin":false},"created_at":"2018-08-03T15:42:54Z","updated_at":"2018-08-03T15:42:54Z","author_association":"CONTRIBUTOR","body":"@spaetz Please head to the forum and find an unofficial beta at https://forum.syncthing.net/t/syncthing-android-unofficial-beta/11920 . I'd appreciate your feedback on this if it solves your issue."}}
{"actor":{"display_login":"Catfriend1"}}