Example #1
0
        public HomePage()
        {
            this.InitializeComponent();
            this.navigationHelper            = new NavigationHelper(this);
            this.navigationHelper.LoadState += navigationHelper_LoadState;
            this.navigationHelper.SaveState += navigationHelper_SaveState;

            // MVVM is not used in this example. We're porting an existing sample from Silverlight MVC
            // we will make use of the existing pattern to achieve the results
            model      = new DietCalculatorModel();
            controller = new DietCalculatorController(model);


            // bydefault Male is Selected, hence collapse hips
            txtHips.Visibility = tblHips.Visibility = Visibility.Collapsed;

            cmbGender.SelectionChanged += (sender, args) =>
            {
                var isSelectedItemMale = ((string)cmbGender.SelectedItem == "Male");
                txtHips.Visibility = tblHips.Visibility = isSelectedItemMale ? Visibility.Collapsed : Visibility.Visible;

                // corner case: reset hipsText to empty if the user had typed in hips and later changed the gender
                if (isSelectedItemMale)
                {
                    txtHips.Text = string.Empty;
                }
            };

            // subscribe to IdealBMI and IdealWeight changed events on the model to update the UI
            // as per the implementation in the core project,
            // any change in IdealBMI or IdealWeight are notified using appropriate event handlers
            model.IdealBMIChanged += (sender, e) =>
            {
                txtIdealBMI.Text = e.IdealBMI.ToString();
            };

            model.IdealWeightChanged += (sender, e) =>
            {
                txtIdealWeight.Text = e.IdealWeight.ToString();
            };

            txtIdealWeight.TextChanged += (sender, e) =>
            {
                controller.SetWeight(StringToNumberUtility.GetDouble(txtWeight.Text, 0.00));
                controller.SetHeight(StringToNumberUtility.GetDouble(txtHeight.Text, 0.00));
                controller.SetIdealWeight(StringToNumberUtility.GetDouble(txtIdealWeight.Text, 0.00));
            };
            txtIdealBMI.TextChanged += (sender, e) =>
            {
                controller.SetWeight(StringToNumberUtility.GetDouble(txtWeight.Text, 0.00));
                controller.SetHeight(StringToNumberUtility.GetDouble(txtHeight.Text, 0.00));
                controller.SetIdealBMI(StringToNumberUtility.GetDouble(txtIdealBMI.Text, 0.00));
            };
        }
        // Constructor
        public MainPage()
        {
            InitializeComponent();

            // MVVM is not used in this example. We're porting an existing sample from Silverlight MVC
            // we will make use of the existing pattern to achieve the results
            model = new DietCalculatorModel();
            controller = new DietCalculatorController(model);

            // bydefault Male is Selected, hence collapse hips
            txtHips.Visibility = tblHips.Visibility = Visibility.Collapsed;

            listGender.SelectionChanged += (sender, args) =>
            {
                var isSelectedItemMale = ((string)listGender.SelectedItem == "Male");
                txtHips.Visibility = tblHips.Visibility = isSelectedItemMale ? Visibility.Collapsed : Visibility.Visible;

                // corner case: reset hipsText to empty if the user had typed in hips and later changed the gender
                if (isSelectedItemMale) txtHips.Text = string.Empty;
            };

            // subscribe to IdealBMI and IdealWeight changed events on the model to update the UI
            // as per the implementation in the core project,
            // any change in IdealBMI or IdealWeight are notified using appropriate event handlers
            model.IdealBMIChanged += (sender, e) =>
            {
                txtIdealBMI.Text = e.IdealBMI.ToString();
            };

            model.IdealWeightChanged += (sender, e) =>
            {
                txtIdealWeight.Text = e.IdealWeight.ToString();
            };

            txtIdealWeight.TextChanged += (sender, e) =>
            {
                controller.SetWeight(StringToNumberUtility.GetDouble(txtWeight.Text, 0.00));
                controller.SetHeight(StringToNumberUtility.GetDouble(txtHeight.Text, 0.00));
                controller.SetIdealWeight(StringToNumberUtility.GetDouble(txtIdealWeight.Text, 0.00));

            };
            txtIdealBMI.TextChanged += (sender, e) =>
            {
                controller.SetWeight(StringToNumberUtility.GetDouble(txtWeight.Text, 0.00));
                controller.SetHeight(StringToNumberUtility.GetDouble(txtHeight.Text, 0.00));
                controller.SetIdealBMI(StringToNumberUtility.GetDouble(txtIdealBMI.Text, 0.00));
            };

            // Sample code to localize the ApplicationBar
            //BuildLocalizedApplicationBar();
        }
        public HomePage()
        {
            this.InitializeComponent();

            this.navigationHelper = new NavigationHelper(this);
            this.navigationHelper.LoadState += this.NavigationHelper_LoadState;
            this.navigationHelper.SaveState += this.NavigationHelper_SaveState;

            model = new DietCalculatorModel();
            controller = new DietCalculatorController(model);

            // bydefault Male is Selected, hence collapse hips
            txtHips.Visibility = tblHips.Visibility = Visibility.Collapsed;

            listGender.SelectionChanged += (sender, args) =>
            {
                var isSelectedItemMale = ((string)listGender.SelectedItem == "Male");
                txtHips.Visibility = tblHips.Visibility = isSelectedItemMale ? Visibility.Collapsed : Visibility.Visible;

                // corner case: reset hipsText to empty if the user had typed in hips and later changed the gender
                if (isSelectedItemMale) txtHips.Text = string.Empty;
            };

            // subscribe to IdealBMI and IdealWeight changed events on the model to update the UI
            // as per the implementation in the core project,
            // any change in IdealBMI or IdealWeight are notified using appropriate event handlers
            model.IdealBMIChanged += (sender, e) =>
            {
                txtIdealBMI.Text = e.IdealBMI.ToString();
            };

            model.IdealWeightChanged += (sender, e) =>
            {
                txtIdealWeight.Text = e.IdealWeight.ToString();
            };

            txtIdealWeight.TextChanged += (sender, e) =>
            {
                controller.SetWeight(StringToNumberUtility.GetDouble(txtWeight.Text, 0.00));
                controller.SetHeight(StringToNumberUtility.GetDouble(txtHeight.Text, 0.00));
                controller.SetIdealWeight(StringToNumberUtility.GetDouble(txtIdealWeight.Text, 0.00));

            };
            txtIdealBMI.TextChanged += (sender, e) =>
            {
                controller.SetWeight(StringToNumberUtility.GetDouble(txtWeight.Text, 0.00));
                controller.SetHeight(StringToNumberUtility.GetDouble(txtHeight.Text, 0.00));
                controller.SetIdealBMI(StringToNumberUtility.GetDouble(txtIdealBMI.Text, 0.00));
            };
        }
        /// <summary>
        /// Finisheds the launching.
        /// </summary>
        /// <returns><c>true</c>, if launching was finisheded, <c>false</c> otherwise.</returns>
        /// <param name="application">Application.</param>
        /// <param name="launchOptions">Launch options.</param>
        public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)
        {
            UINavigationBar.Appearance.TintColor = SecondaryColor;

            window = new UIWindow (UIScreen.MainScreen.Bounds);
            model = new DietCalculatorModel ();

            model.IdealWeightChanged += (sender, e) => {
                Console.WriteLine(model.IdealWeight.ToString());
            };

            controller = new DietCalculatorController (model);

            CreateUI ();

            mainDvc = new DietDialogViewController (rootElement);
            nvc = new UINavigationController (mainDvc);

            window.RootViewController = nvc;
            window.MakeKeyAndVisible ();

            return true;
        }
        /// <summary>
        /// Finisheds the launching.
        /// </summary>
        /// <returns><c>true</c>, if launching was finisheded, <c>false</c> otherwise.</returns>
        /// <param name="application">Application.</param>
        /// <param name="launchOptions">Launch options.</param>
        public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)
        {
            UINavigationBar.Appearance.TintColor = SecondaryColor;

            window = new UIWindow(UIScreen.MainScreen.Bounds);
            model  = new DietCalculatorModel();

            model.IdealWeightChanged += (sender, e) => {
                Console.WriteLine(model.IdealWeight.ToString());
            };

            controller = new DietCalculatorController(model);

            CreateUI();

            mainDvc = new DietDialogViewController(rootElement);
            nvc     = new UINavigationController(mainDvc);

            window.RootViewController = nvc;
            window.MakeKeyAndVisible();

            return(true);
        }
 public void SetController(IDietCalculatorController controller)
 {
     this.controller = controller;
 }
 public void SetController( IDietCalculatorController controller )
 {
     this.controller = controller;
 }
Example #8
0
        /// <summary>
        /// OnCreate
        /// </summary>
        /// <param name="bundle"></param>
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);

            model      = new DietCalculatorModel();
            controller = new DietCalculatorController(model);

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

            // retrieve the widgets in UI using FindByViewId to interact programmatically
            var ageText                = FindViewById <EditText>(Resource.Id.ageText);
            var genderSpinner          = FindViewById <Spinner>(Resource.Id.genderSpinner);
            var levelOfActivitySpinner = FindViewById <Spinner>(Resource.Id.levelOfActivitySpinner);
            var calculateButton        = FindViewById <Button>(Resource.Id.calculateButton);

            var weightText = FindViewById <EditText>(Resource.Id.weightText);
            var heightText = FindViewById <EditText>(Resource.Id.heightText);

            var waistText  = FindViewById <EditText>(Resource.Id.waistText);
            var hipsLayout = FindViewById <LinearLayout>(Resource.Id.hipsLayout);
            var hipstText  = FindViewById <EditText>(Resource.Id.hipsText);

            var idealWeightText = FindViewById <EditText>(Resource.Id.idealWeightText);
            var idealBMIText    = FindViewById <EditText>(Resource.Id.idealBMIText);

            var cholestrolText = FindViewById <EditText>(Resource.Id.cholestrolText);
            var hdlText        = FindViewById <EditText>(Resource.Id.hdlText);

            var neckText = FindViewById <EditText>(Resource.Id.neckText);

            // Assign "Male", "Female" values to spinner using ArrayAdapter. Refer Resources/Values/String.xml
            ArrayAdapter genderAdapter = ArrayAdapter.CreateFromResource(this, Resource.Array.gender_array,
                                                                         Resource.Layout.diet_spinner_item);

            genderAdapter.SetDropDownViewResource(Android.Resource.Layout.SimpleSpinnerDropDownItem);
            genderSpinner.Adapter = genderAdapter;

            // Hips should be visible only if "Female" is selected
            genderSpinner.ItemSelected += (sender, args) =>
            {
                var isSelectedItemMale = ((string)genderSpinner.SelectedItem == "Male");
                hipsLayout.Visibility = isSelectedItemMale ? ViewStates.Gone : ViewStates.Visible;
                // corner case: reset hipsText to empty if the user had typed in hips and later changed the gender
                if (isSelectedItemMale)
                {
                    hipstText.Text = string.Empty;
                }
            };
            // Assign "Active", "Moderate", "Sedentary" values to spinner using ArrayAdapter. Refer Resources/Values/String.xml
            ArrayAdapter levelOfActivityAdapter = ArrayAdapter.CreateFromResource(this, Resource.Array.levelOfActivity_array,
                                                                                  Resource.Layout.diet_spinner_item);

            levelOfActivityAdapter.SetDropDownViewResource(Android.Resource.Layout.SimpleSpinnerDropDownItem);
            levelOfActivitySpinner.Adapter = levelOfActivityAdapter;

            // On Button Click, set appropriate values in the Controller Class
            calculateButton.Click += (sender, args) =>
            {
                controller.SetAge(StringToNumberUtility.GetInt32(ageText.Text, 0));
                controller.SetGender((genderSpinner.SelectedItemId == 0) ? true : false);
                controller.SetWeight(StringToNumberUtility.GetDouble(weightText.Text, 0.00));
                controller.SetHeight(StringToNumberUtility.GetDouble(heightText.Text, 0.00));
                controller.SetWaist(StringToNumberUtility.GetDouble(waistText.Text, 0.00));
                controller.SetHips(StringToNumberUtility.GetDouble((!string.IsNullOrEmpty(hipstText.Text) ? hipstText.Text : null), 0.00));
                controller.SetIdealWeight(StringToNumberUtility.GetDouble(idealWeightText.Text, 0.00));
                controller.SetIdealBMI(StringToNumberUtility.GetDouble(idealBMIText.Text, 0.00));
                controller.SetCholesterol(StringToNumberUtility.GetDouble(cholestrolText.Text, 0.00));
                controller.SetHDL(StringToNumberUtility.GetDouble(hdlText.Text, 0.00));
                controller.SetNeck(StringToNumberUtility.GetDouble(neckText.Text, 0.00));
                var selectedActivity = (string)levelOfActivitySpinner.SelectedItem;
                controller.SetActivity((LevelOfActivity)Enum.Parse(typeof(LevelOfActivity), selectedActivity));

                // Since Model classes are already populated with the results, pass them to Result Activity
                // using PutExtra method
                var resultIntent = new Intent(this, typeof(ResultsActivity));
                resultIntent.PutExtra("CaloriesPerDay", model.CaloriesPerDay.ToString());
                resultIntent.PutExtra("LeanBodyMass", model.LeanBodyMass.ToString());
                resultIntent.PutExtra("PercentBodyFat", model.PercentBodyFat.ToString() + " %");
                resultIntent.PutExtra("WaistHipsRatio", model.WaistHipsRatio.ToString() + " cm");
                resultIntent.PutExtra("BMI", model.BMI.ToString());
                resultIntent.PutExtra("CholesterolRatio", model.CholesterolRatio.ToString() + " mmol/L");
                resultIntent.PutExtra("WaistHeightRatio", model.WaistHeightRatio.ToString() + " cm");
                resultIntent.PutExtra("IdealWeight", model.IdealWeight.ToString() + " kg");
                StartActivity(resultIntent);
            };

            // subscribe to IdealBMI and IdealWeight changed events on the model to update the UI
            // as per the implementation in the core project,
            // any change in IdealBMI or IdealWeight are notified using appropriate event handlers
            model.IdealBMIChanged += (sender, e) =>
            {
                idealBMIText.Text = e.IdealBMI.ToString();
            };

            model.IdealWeightChanged += (sender, e) =>
            {
                idealWeightText.Text = e.IdealWeight.ToString();
            };

            // Ideal BMI has to be calculated if user changes the IdealWeight.
            // Set all the fields in the controller that are used for calcaulation

            idealWeightText.TextChanged += (sender, e) =>
            {
                controller.SetWeight(StringToNumberUtility.GetDouble(weightText.Text, 0.00));
                controller.SetHeight(StringToNumberUtility.GetDouble(heightText.Text, 0.00));
                controller.SetIdealWeight(StringToNumberUtility.GetDouble(idealWeightText.Text, 0.00));
            };
            idealBMIText.TextChanged += (sender, e) =>
            {
                controller.SetWeight(StringToNumberUtility.GetDouble(weightText.Text, 0.00));
                controller.SetHeight(StringToNumberUtility.GetDouble(heightText.Text, 0.00));
                controller.SetIdealBMI(StringToNumberUtility.GetDouble(idealBMIText.Text, 0.00));
            };
        }
        /// <summary>
        /// OnCreate
        /// </summary>
        /// <param name="bundle"></param>
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);

            model = new DietCalculatorModel();
            controller = new DietCalculatorController(model);

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

            // retrieve the widgets in UI using FindByViewId to interact programmatically
            var ageText = FindViewById<EditText>(Resource.Id.ageText);
            var genderSpinner = FindViewById<Spinner>(Resource.Id.genderSpinner);
            var levelOfActivitySpinner = FindViewById<Spinner>(Resource.Id.levelOfActivitySpinner);
            var calculateButton = FindViewById<Button>(Resource.Id.calculateButton);

            var weightText = FindViewById<EditText>(Resource.Id.weightText);
            var heightText = FindViewById<EditText>(Resource.Id.heightText);

            var waistText = FindViewById<EditText>(Resource.Id.waistText);
            var hipsLayout = FindViewById<LinearLayout>(Resource.Id.hipsLayout);
            var hipstText = FindViewById<EditText>(Resource.Id.hipsText);

            var idealWeightText = FindViewById<EditText>(Resource.Id.idealWeightText);
            var idealBMIText = FindViewById<EditText>(Resource.Id.idealBMIText);

            var cholestrolText = FindViewById<EditText>(Resource.Id.cholestrolText);
            var hdlText = FindViewById<EditText>(Resource.Id.hdlText);

            var neckText = FindViewById<EditText>(Resource.Id.neckText);

               // Assign "Male", "Female" values to spinner using ArrayAdapter. Refer Resources/Values/String.xml
            ArrayAdapter genderAdapter = ArrayAdapter.CreateFromResource(this, Resource.Array.gender_array,
                Resource.Layout.diet_spinner_item);
            genderAdapter.SetDropDownViewResource(Android.Resource.Layout.SimpleSpinnerDropDownItem);
            genderSpinner.Adapter = genderAdapter;

            // Hips should be visible only if "Female" is selected
            genderSpinner.ItemSelected += (sender, args) =>
            {
                var isSelectedItemMale = ((string) genderSpinner.SelectedItem == "Male");
                hipsLayout.Visibility =  isSelectedItemMale ? ViewStates.Gone : ViewStates.Visible;
                // corner case: reset hipsText to empty if the user had typed in hips and later changed the gender
                if (isSelectedItemMale) hipstText.Text = string.Empty;
            };
            // Assign "Active", "Moderate", "Sedentary" values to spinner using ArrayAdapter. Refer Resources/Values/String.xml
            ArrayAdapter levelOfActivityAdapter = ArrayAdapter.CreateFromResource(this, Resource.Array.levelOfActivity_array,
                Resource.Layout.diet_spinner_item);
            levelOfActivityAdapter.SetDropDownViewResource(Android.Resource.Layout.SimpleSpinnerDropDownItem);
            levelOfActivitySpinner.Adapter = levelOfActivityAdapter;

            // On Button Click, set appropriate values in the Controller Class
            calculateButton.Click += (sender, args) =>
            {
                controller.SetAge(StringToNumberUtility.GetInt32(ageText.Text, 0));
                controller.SetGender((genderSpinner.SelectedItemId == 0) ? true : false);
                controller.SetWeight(StringToNumberUtility.GetDouble(weightText.Text, 0.00));
                controller.SetHeight(StringToNumberUtility.GetDouble(heightText.Text, 0.00));
                controller.SetWaist(StringToNumberUtility.GetDouble(waistText.Text, 0.00));
                controller.SetHips(StringToNumberUtility.GetDouble((!string.IsNullOrEmpty(hipstText.Text) ? hipstText.Text : null), 0.00));
                controller.SetIdealWeight(StringToNumberUtility.GetDouble(idealWeightText.Text, 0.00));
                controller.SetIdealBMI(StringToNumberUtility.GetDouble(idealBMIText.Text, 0.00));
                controller.SetCholesterol(StringToNumberUtility.GetDouble(cholestrolText.Text, 0.00));
                controller.SetHDL(StringToNumberUtility.GetDouble(hdlText.Text, 0.00));
                controller.SetNeck(StringToNumberUtility.GetDouble(neckText.Text, 0.00));
                var selectedActivity = (string)levelOfActivitySpinner.SelectedItem;
                controller.SetActivity((LevelOfActivity)Enum.Parse(typeof(LevelOfActivity), selectedActivity));

                // Since Model classes are already populated with the results, pass them to Result Activity
                // using PutExtra method
                var resultIntent = new Intent(this, typeof (ResultsActivity));
                resultIntent.PutExtra("CaloriesPerDay", model.CaloriesPerDay.ToString());
                resultIntent.PutExtra("LeanBodyMass", model.LeanBodyMass.ToString());
                resultIntent.PutExtra("PercentBodyFat", model.PercentBodyFat.ToString() + " %");
                resultIntent.PutExtra("WaistHipsRatio", model.WaistHipsRatio.ToString() + " cm");
                resultIntent.PutExtra("BMI", model.BMI.ToString());
                resultIntent.PutExtra("CholesterolRatio", model.CholesterolRatio.ToString() + " mmol/L");
                resultIntent.PutExtra("WaistHeightRatio", model.WaistHeightRatio.ToString() + " cm");
                resultIntent.PutExtra("IdealWeight", model.IdealWeight.ToString() + " kg");
                StartActivity(resultIntent);
            };

            // subscribe to IdealBMI and IdealWeight changed events on the model to update the UI
            // as per the implementation in the core project,
            // any change in IdealBMI or IdealWeight are notified using appropriate event handlers
            model.IdealBMIChanged += (sender, e) =>
            {
                idealBMIText.Text = e.IdealBMI.ToString();
            };

            model.IdealWeightChanged += (sender, e) =>
            {
                idealWeightText.Text = e.IdealWeight.ToString();
            };

            // Ideal BMI has to be calculated if user changes the IdealWeight.
            // Set all the fields in the controller that are used for calcaulation

            idealWeightText.TextChanged += (sender, e) =>
            {
                controller.SetWeight(StringToNumberUtility.GetDouble(weightText.Text, 0.00));
                controller.SetHeight(StringToNumberUtility.GetDouble(heightText.Text, 0.00));
                controller.SetIdealWeight(StringToNumberUtility.GetDouble(idealWeightText.Text, 0.00));

            };
            idealBMIText.TextChanged += (sender, e) =>
            {
                controller.SetWeight(StringToNumberUtility.GetDouble(weightText.Text, 0.00));
                controller.SetHeight(StringToNumberUtility.GetDouble(heightText.Text, 0.00));
                controller.SetIdealBMI(StringToNumberUtility.GetDouble(idealBMIText.Text, 0.00));
            };
        }