void anchorPosted(String anchorNumber)
 {
     textView.Text = "Anchor Number: " + anchorNumber;
     currentStep   = DemoStep.Choosing;
     cloudAnchorManager.Stop();
     cloudAnchorManager = null;
     clearVisuals();
     enableCorrectUIControls();
 }
        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;
            }
        }