{"action":"closed","number":1348,"pull_request":{"url":"https://api.github.com/repos/dimagi/commcare-android/pulls/1348","id":75875734,"html_url":"https://github.com/dimagi/commcare-android/pull/1348","diff_url":"https://github.com/dimagi/commcare-android/pull/1348.diff","patch_url":"https://github.com/dimagi/commcare-android/pull/1348.patch","issue_url":"https://api.github.com/repos/dimagi/commcare-android/issues/1348","number":1348,"state":"closed","locked":false,"title":"Async restores","user":{"login":"amstone326","id":3723143,"avatar_url":"https://avatars.githubusercontent.com/u/3723143?v=3","gravatar_id":"","url":"https://api.github.com/users/amstone326","html_url":"https://github.com/amstone326","followers_url":"https://api.github.com/users/amstone326/followers","following_url":"https://api.github.com/users/amstone326/following{/other_user}","gists_url":"https://api.github.com/users/amstone326/gists{/gist_id}","starred_url":"https://api.github.com/users/amstone326/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/amstone326/subscriptions","organizations_url":"https://api.github.com/users/amstone326/orgs","repos_url":"https://api.github.com/users/amstone326/repos","events_url":"https://api.github.com/users/amstone326/events{/privacy}","received_events_url":"https://api.github.com/users/amstone326/received_events","type":"User","site_admin":false},"body":"Context/Feature Description: \r\n\r\n-Current state, prior to this feature: OTA restore can be very slow for users with a large number of cases. If an incremental sync fails due to timeout of network, the work done during the request is lost and the next request must start again from the beginning. The user also does not see any indication of why the sync request is taking so long or how much longer it may take.\r\n\r\n-New state with this feature: HQ will generate the restore response asynchronously, and send a retry response if the process is taking too long, which includes an estimation of the progress completed so far, and a time period after which to try again. When mobile retries, HQ will send the completed restore response if available, or another retry response if not. On the mobile side, this allows us to show a dialog to the user if a retry response is received, displaying the progress that has been made so far while the server continues to work on generating the restore response, thus creating a much better user experience during restores that take a long time.\r\n\r\n-----\r\n\r\nScreenshots / Other minor UI changes: As part of the UI work for this feature, I decided to try to create clearer distinctions between the 3 potential \"phases\" of a sync by giving each a distinct title (previously we used the \"Communicating with Server\" title for all phases). Clayton is also working on coming up with icons that we might place somewhere on the dialog for each phase (the thinking being that when users report bugs with syncing, we want them to be able to tell us what part of the sync it occurred in, and they are more likely to recall what icon they saw than anything else)\r\n\r\nPhase 1 - contacting server (I removed the progress bar from this dialog because it always remains empty):\r\n![screenshot_20160713-174535](https://cloud.githubusercontent.com/assets/3723143/16809863/d1d80b02-48ef-11e6-90f2-523f156c6bca.png)\r\n\r\nPhase 2 (NEW PHASE, will not always occur) - waiting for server progress:\r\n![screenshot_20160713-174622](https://cloud.githubusercontent.com/assets/3723143/16809886/e15f501c-48ef-11e6-8baf-12994f35fbc6.png)\r\n\r\nPhase 3 - processing data from server:\r\n![screenshot_20160713-174653](https://cloud.githubusercontent.com/assets/3723143/16809898/e7cac378-48ef-11e6-881d-4a97ac46df83.png)\r\n \r\n-----\r\n\r\nI still need to write an integration test for this feature, but that can't be done until HQ has created a way for mobile to request getting a specific response back to a sync request (Farid is going to work on this).","created_at":"2016-06-30T19:22:02Z","updated_at":"2016-07-15T21:16:56Z","closed_at":"2016-07-15T21:16:56Z","merged_at":"2016-07-15T21:16:56Z","merge_commit_sha":"1cc32e108362364079cc375d716248aef5f0f49e","assignee":null,"assignees":[],"milestone":{"url":"https://api.github.com/repos/dimagi/commcare-android/milestones/9","html_url":"https://github.com/dimagi/commcare-android/milestones/commcare_2.29","labels_url":"https://api.github.com/repos/dimagi/commcare-android/milestones/9/labels","id":1783773,"number":9,"title":"commcare_2.29","description":null,"creator":{"login":"phillipm","id":94817,"avatar_url":"https://avatars.githubusercontent.com/u/94817?v=3","gravatar_id":"","url":"https://api.github.com/users/phillipm","html_url":"https://github.com/phillipm","followers_url":"https://api.github.com/users/phillipm/followers","following_url":"https://api.github.com/users/phillipm/following{/other_user}","gists_url":"https://api.github.com/users/phillipm/gists{/gist_id}","starred_url":"https://api.github.com/users/phillipm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/phillipm/subscriptions","organizations_url":"https://api.github.com/users/phillipm/orgs","repos_url":"https://api.github.com/users/phillipm/repos","events_url":"https://api.github.com/users/phillipm/events{/privacy}","received_events_url":"https://api.github.com/users/phillipm/received_events","type":"User","site_admin":false},"open_issues":15,"closed_issues":30,"state":"open","created_at":"2016-05-23T22:33:18Z","updated_at":"2016-07-15T21:16:56Z","due_on":null,"closed_at":null},"commits_url":"https://api.github.com/repos/dimagi/commcare-android/pulls/1348/commits","review_comments_url":"https://api.github.com/repos/dimagi/commcare-android/pulls/1348/comments","review_comment_url":"https://api.github.com/repos/dimagi/commcare-android/pulls/comments{/number}","comments_url":"https://api.github.com/repos/dimagi/commcare-android/issues/1348/comments","statuses_url":"https://api.github.com/repos/dimagi/commcare-android/statuses/7b01aaa3e192664643102466063a0102175c329b","head":{"label":"dimagi:async-restores","ref":"async-restores","sha":"7b01aaa3e192664643102466063a0102175c329b","user":{"login":"dimagi","id":94514,"avatar_url":"https://avatars.githubusercontent.com/u/94514?v=3","gravatar_id":"","url":"https://api.github.com/users/dimagi","html_url":"https://github.com/dimagi","followers_url":"https://api.github.com/users/dimagi/followers","following_url":"https://api.github.com/users/dimagi/following{/other_user}","gists_url":"https://api.github.com/users/dimagi/gists{/gist_id}","starred_url":"https://api.github.com/users/dimagi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dimagi/subscriptions","organizations_url":"https://api.github.com/users/dimagi/orgs","repos_url":"https://api.github.com/users/dimagi/repos","events_url":"https://api.github.com/users/dimagi/events{/privacy}","received_events_url":"https://api.github.com/users/dimagi/received_events","type":"Organization","site_admin":false},"repo":{"id":20939877,"name":"commcare-android","full_name":"dimagi/commcare-android","owner":{"login":"dimagi","id":94514,"avatar_url":"https://avatars.githubusercontent.com/u/94514?v=3","gravatar_id":"","url":"https://api.github.com/users/dimagi","html_url":"https://github.com/dimagi","followers_url":"https://api.github.com/users/dimagi/followers","following_url":"https://api.github.com/users/dimagi/following{/other_user}","gists_url":"https://api.github.com/users/dimagi/gists{/gist_id}","starred_url":"https://api.github.com/users/dimagi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dimagi/subscriptions","organizations_url":"https://api.github.com/users/dimagi/orgs","repos_url":"https://api.github.com/users/dimagi/repos","events_url":"https://api.github.com/users/dimagi/events{/privacy}","received_events_url":"https://api.github.com/users/dimagi/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/dimagi/commcare-android","description":"The best open source form management tool in town","fork":false,"url":"https://api.github.com/repos/dimagi/commcare-android","forks_url":"https://api.github.com/repos/dimagi/commcare-android/forks","keys_url":"https://api.github.com/repos/dimagi/commcare-android/keys{/key_id}","collaborators_url":"https://api.github.com/repos/dimagi/commcare-android/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/dimagi/commcare-android/teams","hooks_url":"https://api.github.com/repos/dimagi/commcare-android/hooks","issue_events_url":"https://api.github.com/repos/dimagi/commcare-android/issues/events{/number}","events_url":"https://api.github.com/repos/dimagi/commcare-android/events","assignees_url":"https://api.github.com/repos/dimagi/commcare-android/assignees{/user}","branches_url":"https://api.github.com/repos/dimagi/commcare-android/branches{/branch}","tags_url":"https://api.github.com/repos/dimagi/commcare-android/tags","blobs_url":"https://api.github.com/repos/dimagi/commcare-android/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/dimagi/commcare-android/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/dimagi/commcare-android/git/refs{/sha}","trees_url":"https://api.github.com/repos/dimagi/commcare-android/git/trees{/sha}","statuses_url":"https://api.github.com/repos/dimagi/commcare-android/statuses/{sha}","languages_url":"https://api.github.com/repos/dimagi/commcare-android/languages","stargazers_url":"https://api.github.com/repos/dimagi/commcare-android/stargazers","contributors_url":"https://api.github.com/repos/dimagi/commcare-android/contributors","subscribers_url":"https://api.github.com/repos/dimagi/commcare-android/subscribers","subscription_url":"https://api.github.com/repos/dimagi/commcare-android/subscription","commits_url":"https://api.github.com/repos/dimagi/commcare-android/commits{/sha}","git_commits_url":"https://api.github.com/repos/dimagi/commcare-android/git/commits{/sha}","comments_url":"https://api.github.com/repos/dimagi/commcare-android/comments{/number}","issue_comment_url":"https://api.github.com/repos/dimagi/commcare-android/issues/comments{/number}","contents_url":"https://api.github.com/repos/dimagi/commcare-android/contents/{+path}","compare_url":"https://api.github.com/repos/dimagi/commcare-android/compare/{base}...{head}","merges_url":"https://api.github.com/repos/dimagi/commcare-android/merges","archive_url":"https://api.github.com/repos/dimagi/commcare-android/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/dimagi/commcare-android/downloads","issues_url":"https://api.github.com/repos/dimagi/commcare-android/issues{/number}","pulls_url":"https://api.github.com/repos/dimagi/commcare-android/pulls{/number}","milestones_url":"https://api.github.com/repos/dimagi/commcare-android/milestones{/number}","notifications_url":"https://api.github.com/repos/dimagi/commcare-android/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/dimagi/commcare-android/labels{/name}","releases_url":"https://api.github.com/repos/dimagi/commcare-android/releases{/id}","deployments_url":"https://api.github.com/repos/dimagi/commcare-android/deployments","created_at":"2014-06-17T21:17:26Z","updated_at":"2016-06-26T22:34:57Z","pushed_at":"2016-07-15T21:16:56Z","git_url":"git://github.com/dimagi/commcare-android.git","ssh_url":"git@github.com:dimagi/commcare-android.git","clone_url":"https://github.com/dimagi/commcare-android.git","svn_url":"https://github.com/dimagi/commcare-android","homepage":"https://play.google.com/store/apps/details?id=org.commcare.dalvik&hl=en","size":77390,"stargazers_count":9,"watchers_count":9,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":10,"mirror_url":null,"open_issues_count":20,"forks":10,"open_issues":20,"watchers":9,"default_branch":"master"}},"base":{"label":"dimagi:master","ref":"master","sha":"a4b0c82753b00dd50d0acce20d01b0e20df162f8","user":{"login":"dimagi","id":94514,"avatar_url":"https://avatars.githubusercontent.com/u/94514?v=3","gravatar_id":"","url":"https://api.github.com/users/dimagi","html_url":"https://github.com/dimagi","followers_url":"https://api.github.com/users/dimagi/followers","following_url":"https://api.github.com/users/dimagi/following{/other_user}","gists_url":"https://api.github.com/users/dimagi/gists{/gist_id}","starred_url":"https://api.github.com/users/dimagi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dimagi/subscriptions","organizations_url":"https://api.github.com/users/dimagi/orgs","repos_url":"https://api.github.com/users/dimagi/repos","events_url":"https://api.github.com/users/dimagi/events{/privacy}","received_events_url":"https://api.github.com/users/dimagi/received_events","type":"Organization","site_admin":false},"repo":{"id":20939877,"name":"commcare-android","full_name":"dimagi/commcare-android","owner":{"login":"dimagi","id":94514,"avatar_url":"https://avatars.githubusercontent.com/u/94514?v=3","gravatar_id":"","url":"https://api.github.com/users/dimagi","html_url":"https://github.com/dimagi","followers_url":"https://api.github.com/users/dimagi/followers","following_url":"https://api.github.com/users/dimagi/following{/other_user}","gists_url":"https://api.github.com/users/dimagi/gists{/gist_id}","starred_url":"https://api.github.com/users/dimagi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dimagi/subscriptions","organizations_url":"https://api.github.com/users/dimagi/orgs","repos_url":"https://api.github.com/users/dimagi/repos","events_url":"https://api.github.com/users/dimagi/events{/privacy}","received_events_url":"https://api.github.com/users/dimagi/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/dimagi/commcare-android","description":"The best open source form management tool in town","fork":false,"url":"https://api.github.com/repos/dimagi/commcare-android","forks_url":"https://api.github.com/repos/dimagi/commcare-android/forks","keys_url":"https://api.github.com/repos/dimagi/commcare-android/keys{/key_id}","collaborators_url":"https://api.github.com/repos/dimagi/commcare-android/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/dimagi/commcare-android/teams","hooks_url":"https://api.github.com/repos/dimagi/commcare-android/hooks","issue_events_url":"https://api.github.com/repos/dimagi/commcare-android/issues/events{/number}","events_url":"https://api.github.com/repos/dimagi/commcare-android/events","assignees_url":"https://api.github.com/repos/dimagi/commcare-android/assignees{/user}","branches_url":"https://api.github.com/repos/dimagi/commcare-android/branches{/branch}","tags_url":"https://api.github.com/repos/dimagi/commcare-android/tags","blobs_url":"https://api.github.com/repos/dimagi/commcare-android/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/dimagi/commcare-android/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/dimagi/commcare-android/git/refs{/sha}","trees_url":"https://api.github.com/repos/dimagi/commcare-android/git/trees{/sha}","statuses_url":"https://api.github.com/repos/dimagi/commcare-android/statuses/{sha}","languages_url":"https://api.github.com/repos/dimagi/commcare-android/languages","stargazers_url":"https://api.github.com/repos/dimagi/commcare-android/stargazers","contributors_url":"https://api.github.com/repos/dimagi/commcare-android/contributors","subscribers_url":"https://api.github.com/repos/dimagi/commcare-android/subscribers","subscription_url":"https://api.github.com/repos/dimagi/commcare-android/subscription","commits_url":"https://api.github.com/repos/dimagi/commcare-android/commits{/sha}","git_commits_url":"https://api.github.com/repos/dimagi/commcare-android/git/commits{/sha}","comments_url":"https://api.github.com/repos/dimagi/commcare-android/comments{/number}","issue_comment_url":"https://api.github.com/repos/dimagi/commcare-android/issues/comments{/number}","contents_url":"https://api.github.com/repos/dimagi/commcare-android/contents/{+path}","compare_url":"https://api.github.com/repos/dimagi/commcare-android/compare/{base}...{head}","merges_url":"https://api.github.com/repos/dimagi/commcare-android/merges","archive_url":"https://api.github.com/repos/dimagi/commcare-android/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/dimagi/commcare-android/downloads","issues_url":"https://api.github.com/repos/dimagi/commcare-android/issues{/number}","pulls_url":"https://api.github.com/repos/dimagi/commcare-android/pulls{/number}","milestones_url":"https://api.github.com/repos/dimagi/commcare-android/milestones{/number}","notifications_url":"https://api.github.com/repos/dimagi/commcare-android/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/dimagi/commcare-android/labels{/name}","releases_url":"https://api.github.com/repos/dimagi/commcare-android/releases{/id}","deployments_url":"https://api.github.com/repos/dimagi/commcare-android/deployments","created_at":"2014-06-17T21:17:26Z","updated_at":"2016-06-26T22:34:57Z","pushed_at":"2016-07-15T21:16:56Z","git_url":"git://github.com/dimagi/commcare-android.git","ssh_url":"git@github.com:dimagi/commcare-android.git","clone_url":"https://github.com/dimagi/commcare-android.git","svn_url":"https://github.com/dimagi/commcare-android","homepage":"https://play.google.com/store/apps/details?id=org.commcare.dalvik&hl=en","size":77390,"stargazers_count":9,"watchers_count":9,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":10,"mirror_url":null,"open_issues_count":20,"forks":10,"open_issues":20,"watchers":9,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/dimagi/commcare-android/pulls/1348"},"html":{"href":"https://github.com/dimagi/commcare-android/pull/1348"},"issue":{"href":"https://api.github.com/repos/dimagi/commcare-android/issues/1348"},"comments":{"href":"https://api.github.com/repos/dimagi/commcare-android/issues/1348/comments"},"review_comments":{"href":"https://api.github.com/repos/dimagi/commcare-android/pulls/1348/comments"},"review_comment":{"href":"https://api.github.com/repos/dimagi/commcare-android/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/dimagi/commcare-android/pulls/1348/commits"},"statuses":{"href":"https://api.github.com/repos/dimagi/commcare-android/statuses/7b01aaa3e192664643102466063a0102175c329b"}},"merged":true,"mergeable":null,"mergeable_state":"unknown","merged_by":{"login":"phillipm","id":94817,"avatar_url":"https://avatars.githubusercontent.com/u/94817?v=3","gravatar_id":"","url":"https://api.github.com/users/phillipm","html_url":"https://github.com/phillipm","followers_url":"https://api.github.com/users/phillipm/followers","following_url":"https://api.github.com/users/phillipm/following{/other_user}","gists_url":"https://api.github.com/users/phillipm/gists{/gist_id}","starred_url":"https://api.github.com/users/phillipm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/phillipm/subscriptions","organizations_url":"https://api.github.com/users/phillipm/orgs","repos_url":"https://api.github.com/users/phillipm/repos","events_url":"https://api.github.com/users/phillipm/events{/privacy}","received_events_url":"https://api.github.com/users/phillipm/received_events","type":"User","site_admin":false},"comments":3,"review_comments":20,"commits":23,"additions":359,"deletions":100,"changed_files":17}}
{"actor":{"display_login":"phillipm"}}