protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate (bundle);

            gmb = new Gmusicbrowser("macdesktop.orospakr.ca", 8081);

            // Set our view from the "main" layout resource
            SetContentView (Resource.Layout.Main);

            playButton = FindViewById<ImageButton>
                (Resource.Id.PlayButton);
            titleTextView = FindViewById <TextView> (Resource.Id.TitleTextView);
            artistTextView = FindViewById <TextView> (Resource.Id.ArtistTextView);
            ratingBar = FindViewById <RatingBar> (Resource.Id.RatingBar);
            nextButton = FindViewById <ImageButton> (Resource.Id.NextButton);
            prevButton = FindViewById <ImageButton> (Resource.Id.PrevButton);
            volumeSeekBar = FindViewById <SeekBar> (Resource.Id.VolumeSeekBar);
            songSeekBar = FindViewById <SeekBar> (Resource.Id.SongSeekbar);

            playButton.Click += (sender, args) => {
                // button.Text = string.Format ("{0} clicks!", count++);
                gmb.PushNewPlayerState(new Player() { Playing = currentState.Playing == 1 ? 0 : 1 }).ContinueWith((playerResult) => {
                    if(playerResult.IsFaulted) {
                    } else {
                        HandleUpdatedStateFromNetwork(playerResult.Result);
                    }
                });
            };

            ratingBar.RatingBarChange += (sender, e) => {
                if(currentState != null && currentState.Current != null) {
                    var newSong = new Song() { Id = currentState.Current.Id, Rating = (int)(ratingBar.Rating * 20)};
                    gmb.PostUpdatedSong(newSong);
                }
            };

            nextButton.Click += (sender, e) => {
                gmb.Next().ContinueWith((playerResult) => {
                    HandleUpdatedStateFromNetwork(playerResult.Result);
                });
            };

            prevButton.Click += (sender, e) => {
                gmb.Previous ().ContinueWith((playerResult) => {
                    HandleUpdatedStateFromNetwork(playerResult.Result);
                });
            };

            volumeSeekBar.ProgressChanged += (sender, e) => {
                if(!preventSeekBarUpdates) {
                    gmb.PushNewPlayerState (new Player() { Volume = volumeSeekBar.Progress / (float)100 });
                }
            };

            songSeekBar.ProgressChanged += (sender, e) => {
                if(!preventSeekBarUpdates) {
                    gmb.PushNewPlayerState (new Player() { PlayPosition = songSeekBar.Progress });
                }
            };

            prog = new ProgressDialog (this);
            prog.SetProgressStyle(ProgressDialogStyle.Spinner);
            prog.SetMessage(this.GetString(Resource.String.connection_progress));
            prog.Show ();
        }
        public override void ViewDidLoad()
        {
            base.ViewDidLoad ();

            addBarButton = new UIBarButtonItem(UIBarButtonSystemItem.Add);
            addBarButton.Enabled = false;

            this.NavigationItem.RightBarButtonItem = addBarButton;

            serverListTableSource = new ServerListTableSource(this, this.ServerList, () => {
                addBarButton.Enabled = true;
            });

            this.ServerList.Source = serverListTableSource;

            addBarButton.Clicked += (sender, e) => {
                var hostEdit = new EntryElement("Hostname", "Host or IP address", "");
                var portEdit = new EntryElement("Port", "TCP port the HTTP server listens on", "");

                var gmbSettings = new Section() {
                    hostEdit, portEdit
                };
                var root = new RootElement("GMB Coordinates") {
                    gmbSettings
                };

                var settingsDialogVC = new DialogViewController(root);
                var backButton =  new UIBarButtonItem(UIBarButtonSystemItem.Add, (s, args) => {
                    Gmusicbrowser newGmb;
                    try {
                        newGmb = new Gmusicbrowser(hostEdit.Value, UInt16.Parse (portEdit.Value));
                    } catch (Exception formatEx) {
                        Debug.WriteLine(formatEx.Message);
                        var alert = new UIAlertView("Bogus Input", "Invalid host or port", null, "OK");
                        alert.Message = "Invalid host or port.";
                        alert.AlertViewStyle = UIAlertViewStyle.Default;
                        alert.Show ();
                        return;
                    }
                    this.NavigationController.PopViewControllerAnimated(true);
                    serverListTableSource.InsertNewServer(newGmb);
                });

                settingsDialogVC.NavigationItem.RightBarButtonItem = backButton;
                this.NavigationController.PushViewController(settingsDialogVC, true);
            };

            // Perform any additional setup after loading the view, typically from a nib.
        }
        public void SetGmusicbrowser(Gmusicbrowser gmb)
        {
            // this.detailDescriptionLabel.Text = gmb.Hostname;

            if (this.gmb != gmb) {
                this.gmb = gmb;

                // Update the view
                ConfigureView ();
                UpdateFromServer ();
            }

            if (this.popoverController != null)
                this.popoverController.Dismiss (true);
        }
 public void InsertNewServer(Gmusicbrowser newServer)
 {
     if (currentServers == null) {
         return;
     }
     var newPos = currentServers.Count;
     currentServers.Add (newServer);
     var path = NSIndexPath.FromRowSection(newPos, 0);
     this.table.InsertRows(new NSIndexPath[] { path }, UITableViewRowAnimation.Fade);
     this.serverList.WriteToStorage(this.currentServers); // we'll just let that go off async, best-effort basis
 }