//------------------------------------------------------------------------------
        public AdvexpSettingsViewController() : base(null, true)
        {
            AdvexpSettings.LoadSettings();

            this.Root = CreateRoot();

            NSNotificationCenter.DefaultCenter.AddObserver(
                UIApplication.DidBecomeActiveNotification,
                (notify) =>
            {
                InvokeOnMainThread(() =>
                {
                    UpdateAdvexpSettings();
                });
            });
        }
        //------------------------------------------------------------------------------
        void UpdateAdvexpSettings()
        {
            AdvexpSettings.LoadSettings();

            m_airplaneMode.Value  = AdvexpSettings.AirplaneMode;
            m_notifications.Value = AdvexpSettings.Notifications;

            m_brightness.SetValue(AdvexpSettings.Brightness);
            m_autoBrightness.Value = AdvexpSettings.AutoBrightness;

            m_bluetooth.Value = AdvexpSettings.Bluetooth;

            m_locationService.Value = AdvexpSettings.LocationServices;

            m_autoLock.RadioSelected = (int)AdvexpSettings.AutoLock;

            m_homeButtonDoubleClick.RadioSelected = (int)AdvexpSettings.HomeButtonDoubleClick;
        }
        //------------------------------------------------------------------------------
        RootElement CreateRoot()
        {
            m_airplaneMode = new BooleanElement("Airplane Mode", AdvexpSettings.AirplaneMode);
            m_airplaneMode.ValueChanged += (object sender, EventArgs e) =>
            {
                AdvexpSettings.AirplaneMode = m_airplaneMode.Value;
                AdvexpSettings.SaveSetting(s => AdvexpSettings.AirplaneMode);
            };

            m_notifications = new BooleanElement("Notifications", AdvexpSettings.Notifications);
            m_notifications.ValueChanged += (object sender, EventArgs e) =>
            {
                AdvexpSettings.Notifications = m_notifications.Value;
                AdvexpSettings.SaveSetting(s => AdvexpSettings.Notifications);
            };

            m_brightness = new FloatElementEx(AdvexpSettings.Brightness,
                                              lockable: false,
                                              valueChanged: (val) =>
            {
                AdvexpSettings.Brightness = val;
                AdvexpSettings.SaveSetting(s => AdvexpSettings.Brightness);
            });

            m_autoBrightness = new BooleanElement("Auto-brightness", AdvexpSettings.AutoBrightness);
            m_autoBrightness.ValueChanged += (object sender, EventArgs e) =>
            {
                AdvexpSettings.AutoBrightness = m_autoBrightness.Value;
                AdvexpSettings.SaveSetting(s => AdvexpSettings.AutoBrightness);
            };

            return(new RootElement("Advexp.Settings")
            {
                new Section()
                {
                    m_airplaneMode,
                    new RootElement("Notifications", 0, 0)
                    {
                        new Section(null, "Turn off Notifications to disable Sounds " +
                                    "Alerts and Home Screen Badges for the applications below.")
                        {
                            m_notifications
                        }
                    }
                },
                new Section()
                {
                    new RootElement("Brightness")
                    {
                        new Section()
                        {
                            m_brightness,
                            m_autoBrightness,
                        }
                    },
                },
                new Section()
                {
                    CreateGeneralSection(),
                }
            });
        }
        //------------------------------------------------------------------------------
        RootElement CreateGeneralSection()
        {
            m_bluetooth = new BooleanElement("Bluetooth", AdvexpSettings.Bluetooth);
            m_bluetooth.ValueChanged += (object sender, EventArgs e) =>
            {
                AdvexpSettings.Bluetooth = m_bluetooth.Value;
                AdvexpSettings.SaveSetting(s => AdvexpSettings.Bluetooth);
            };

            m_locationService = new BooleanElement("Location Services", AdvexpSettings.LocationServices);
            m_locationService.ValueChanged += (object sender, EventArgs e) =>
            {
                AdvexpSettings.LocationServices = m_locationService.Value;
                AdvexpSettings.SaveSetting(s => AdvexpSettings.LocationServices);
            };

            Action <RadioElementEx, EventArgs> saveAutoLockDelegate = (sender, e) =>
            {
                AdvexpSettings.AutoLock = (AutoLock)m_autoLock.RadioSelected;
                AdvexpSettings.SaveSetting(s => AdvexpSettings.AutoLock);
            };

            m_autoLock = new RootElement("Auto-Lock", new RadioGroup((int)AdvexpSettings.AutoLock))
            {
                new Section()
                {
                    new RadioElementEx("Never", saveAutoLockDelegate),
                    new RadioElementEx("1 Minute", saveAutoLockDelegate),
                    new RadioElementEx("2 Minutes", saveAutoLockDelegate),
                    new RadioElementEx("3 Minutes", saveAutoLockDelegate),
                    new RadioElementEx("4 Minutes", saveAutoLockDelegate),
                    new RadioElementEx("5 Minutes", saveAutoLockDelegate),
                }
            };

            Action <RadioElementEx, EventArgs> saveHomeButtonDoubleClickDelegate = (sender, e) =>
            {
                AdvexpSettings.HomeButtonDoubleClick = (HomeButtonDoubleClick)m_homeButtonDoubleClick.RadioSelected;
                AdvexpSettings.SaveSetting(s => AdvexpSettings.HomeButtonDoubleClick);
            };

            m_homeButtonDoubleClick = new RootElement("Home Button", new RadioGroup((int)AdvexpSettings.HomeButtonDoubleClick))
            {
                new Section("Double-click the Home Button for:")
                {
                    new RadioElementEx("Home", saveHomeButtonDoubleClickDelegate),
                    new RadioElementEx("Search", saveHomeButtonDoubleClickDelegate),
                    new RadioElementEx("Phone favorites", saveHomeButtonDoubleClickDelegate),
                    new RadioElementEx("Camera", saveHomeButtonDoubleClickDelegate),
                    new RadioElementEx("iPod", saveHomeButtonDoubleClickDelegate),
                }
            };

            return(new RootElement("General")
            {
                new Section()
                {
                    new RootElement("Bluetooth", 0, 0)
                    {
                        new Section()
                        {
                            m_bluetooth
                        }
                    },
                    m_locationService,
                },
                new Section()
                {
                    m_autoLock,
                    m_homeButtonDoubleClick,
                },
            });
        }