private async void transitionToSaving(AnchorVisual visual) { Log.Debug("ASADemo:", "transition to saving"); currentStep = DemoStep.Saving; enableCorrectUIControls(); Log.Debug("ASADemo", "creating anchor"); CloudSpatialAnchor cloudAnchor = new CloudSpatialAnchor(); visual.SetCloudAnchor(cloudAnchor); cloudAnchor.LocalAnchor = visual.LocalAnchor; try { var anchor = await cloudAnchorManager.CreateAnchorAsync(cloudAnchor); String anchorId = anchor.Identifier; Log.Debug("ASADemo:", "created anchor: " + anchorId); visual.SetColor(savedColor); anchorVisuals[anchorId] = visual; anchorVisuals.Remove(""); Log.Debug("ASADemo", "recording anchor with web service"); AnchorPoster poster = new AnchorPoster(SharingAnchorsServiceUrl); Log.Debug("ASADemo", "anchorId: " + anchorId); var result = await poster.PostAnchorAsync(anchorId); anchorPosted(result); } catch (System.Exception ex) { string exceptionMessage = (ex is CloudSpatialException cse) ? cse.ErrorCode.ToString() : ex.Message; createAnchorExceptionCompletion(exceptionMessage); visual.SetColor(failedColor); } }
private async void advanceDemo() { switch (currentDemoStep) { case DemoStep.SaveCloudAnchor: AnchorVisual visual = anchorVisuals[""]; if (visual == null) { return; } if (!enoughDataForSaving) { return; } // Hide the back button until we're done RunOnUiThread(() => backButton.Visibility = ViewStates.Gone); setupLocalCloudAnchor(visual); try { await cloudAnchorManager.CreateAnchorAsync(visual.CloudAnchor); } catch (System.Exception ex) { anchorSaveFailed(ex.Message); } lock (progressLock) { RunOnUiThread(() => { scanProgressText.Visibility = ViewStates.Gone; scanProgressText.Text = ""; actionButton.Visibility = ViewStates.Invisible; statusText.Text = "Saving cloud anchor..."; }); currentDemoStep = DemoStep.SavingCloudAnchor; } break; case DemoStep.CreateSessionForQuery: cloudAnchorManager.Stop(); cloudAnchorManager.Reset(); clearVisuals(); RunOnUiThread(() => { statusText.Text = ""; actionButton.Text = "Locate anchor"; }); currentDemoStep = DemoStep.LookForAnchor; break; case DemoStep.LookForAnchor: // We need to restart the session to find anchors we created. startNewSession(); AnchorLocateCriteria criteria = new AnchorLocateCriteria(); criteria.SetIdentifiers(new string[] { anchorID }); // Cannot run more than one watcher concurrently stopWatcher(); cloudAnchorManager.StartLocating(criteria); RunOnUiThread(() => { actionButton.Visibility = ViewStates.Invisible; statusText.Text = "Look for anchor"; }); break; case DemoStep.LookForNearbyAnchors: if (anchorVisuals.Count == 0 || !anchorVisuals.ContainsKey(anchorID)) { RunOnUiThread(() => statusText.Text = "Cannot locate nearby. Previous anchor not yet located."); break; } AnchorLocateCriteria nearbyLocateCriteria = new AnchorLocateCriteria(); NearAnchorCriteria nearAnchorCriteria = new NearAnchorCriteria(); nearAnchorCriteria.DistanceInMeters = 5; nearAnchorCriteria.SourceAnchor = anchorVisuals[anchorID].CloudAnchor; nearbyLocateCriteria.NearAnchor = nearAnchorCriteria; // Cannot run more than one watcher concurrently stopWatcher(); cloudAnchorManager.StartLocating(nearbyLocateCriteria); RunOnUiThread(() => { actionButton.Visibility = ViewStates.Invisible; statusText.Text = "Locating..."; }); break; case DemoStep.End: foreach (AnchorVisual toDeleteVisual in anchorVisuals.Values) { var _ = cloudAnchorManager.DeleteAnchorAsync(toDeleteVisual.CloudAnchor); } destroySession(); RunOnUiThread(() => { actionButton.Text = "Restart"; statusText.Text = ""; backButton.Visibility = ViewStates.Visible; }); currentDemoStep = DemoStep.Restart; break; case DemoStep.Restart: startDemo(); break; } }