// User controls

        private void UpdateButtonVisibilities()
        {
            debugRootView.RemoveAllViews();

            retryButton.Visibility = inErrorState ? ViewStates.Visible : ViewStates.Gone;
            debugRootView.AddView(retryButton);

            if (player == null)
            {
                return;
            }

            var mappedTrackInfo = trackSelector.CurrentMappedTrackInfo;

            if (mappedTrackInfo == null)
            {
                return;
            }

            for (int i = 0; i < mappedTrackInfo.Length; i++)
            {
                var trackGroups = mappedTrackInfo.GetTrackGroups(i);
                if (trackGroups.Length != 0)
                {
                    Button button = new Button(this);
                    int    label;
                    switch (player.GetRendererType(i))
                    {
                    case C.TrackTypeAudio:
                        label = Resource.String.audio;
                        break;

                    case C.TrackTypeVideo:
                        label = Resource.String.video;
                        break;

                    case C.TrackTypeText:
                        label = Resource.String.text;
                        break;

                    default:
                        continue;
                    }
                    button.SetText(label);
                    button.Tag = i;
                    button.SetOnClickListener(this);
                    debugRootView.AddView(button, debugRootView.ChildCount - 1);
                }
            }
        }