protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);
            SetContentView(Resource.Layout.MedicationDosageView);

            var toolbar = FindViewById <Toolbar>(Resource.Id.toolbar);

            //Toolbar will now take on default actionbar characteristics
            SetSupportActionBar(toolbar);

            SupportActionBar.Title = AppResources.MedicationDosageViewModel_Title;
            nameText   = FindViewById <EditText>(Resource.Id.NameEditText);
            dosageText = FindViewById <EditText>(Resource.Id.DosageEditText);

            takePicutre = FindViewById <LinearLayout>(Resource.Id.take_photo);
            picture     = FindViewById <ImageView>(Resource.Id.photo);

            daysOfWeek = FindViewById <TextView>(Resource.Id.label_medication_days_of_week);

            deleteBtn  = FindViewById <Button>(Resource.Id.deleteBtn);
            hoursList  = FindViewById <MedicationDosageTimeLayout>(Resource.Id.notificationHours);
            timePicker = FindViewById <Button>(Resource.Id.time_picker);

            everyday = FindViewById <RadioButton>(Resource.Id.everyday);
            custom   = FindViewById <RadioButton>(Resource.Id.custom);


            hoursList.ItemTemplateId = Resource.Layout.time_item;

            barScan = FindViewById <FloatingActionButton>(Resource.Id.barScan);

            MobileBarcodeScanner.Initialize(Application);

            barScan.Click += async(sender, e) =>
            {
                // Initialize the scanner first so it can track the current context



                var scanner = new MobileBarcodeScanner();

                var result = await scanner.Scan();

                if (result != null)
                {
                    nameText.SetText(result.ToString(), TextView.BufferType.Editable);
                }
            };

            //obsluga usuwania - jedna z kilku mozliwosci
            //wcisniecie przyscisku delete spowoduje wywolanie na adapterze komendy z usuwana godzina (implementacja w MedicationDosageTimeListAdapter
            var hourAdapter = (MedicationDosageTimeListAdapter)hoursList.Adapter;//dialog tworzymy i pokazujemy z kodu

            hourAdapter.DeleteRequested.Subscribe(time => this.ViewModel.DosageHours.Remove(time));

            //aby ui sie odswiezyl, lista godzin powinna być jakimś typem NotifyCollectionChanged (np. ReactiveList)
            //w samym UI można użyć MvxLinearLayout, który działa podobnie do listy,ale nie spowoduje scrolla w scrollu
            //wtedy właściwość Times bindujemy to tego komponentu
            timePicker.Click += (o, e) =>
            {
                TimePickerDialog timePickerFragment = new TimePickerDialog(
                    this,
                    (s, args) =>
                {
                    // handler jest wołany dwukrotnie: raz bo wybrana została godzina, drugi bo picker został zamknięty - ten musimy zignorować
                    if (((TimePicker)s).IsShown)
                    {
                        this.ViewModel.DosageHours.Add(new TimeSpan(args.HourOfDay, args.Minute, 0));
                    }
                },
                    12,
                    00,
                    true
                    );
                timePickerFragment.Show();
            };

            SecondBottomSheet secondDialog = new SecondBottomSheet(this);
            DeleteDialog      deleteDialog = new DeleteDialog(this);

            View deleteView = LayoutInflater.Inflate(Resource.Layout.delete_dialog, null);

            deleteDialog.SetContentView(deleteView, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.MatchParent));

            custom.Click += (o, e) =>
            {
                secondDialog.Show(ViewModel.Monday, ViewModel.Tuesday, ViewModel.Wednesday, ViewModel.Thursday, ViewModel.Friday, ViewModel.Saturday, ViewModel.Sunday);
            };

            secondDialog.Accept.Subscribe(x =>
            {
                this.ViewModel.Monday    = x[0];
                this.ViewModel.Tuesday   = x[1];
                this.ViewModel.Wednesday = x[2];
                this.ViewModel.Thursday  = x[3];
                this.ViewModel.Friday    = x[4];
                this.ViewModel.Saturday  = x[5];
                this.ViewModel.Sunday    = x[6];
                secondDialog.Hide();
            });
            secondDialog.Cancel.Subscribe(x =>
            {
                secondDialog.Dismiss();
            });


            deleteDialog.Create();
            deleteBtn.Click += (o, e) => deleteDialog.Show();
            deleteDialog.Accept.Subscribe(x =>
            {
                if (((ICommand)ViewModel.Delete).CanExecute(null))
                {
                    ViewModel.Delete.Execute().Subscribe();
                }
            });
            deleteDialog.Cancel.Subscribe(x => deleteDialog.Dismiss());

            SetBinding();
        }
Esempio n. 2
0
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);
            SetContentView(Resource.Layout.Settings);
            var toolbar = FindViewById <Toolbar>(Resource.Id.toolbar);

            SetSupportActionBar(toolbar);
            SupportActionBar.SetDisplayHomeAsUpEnabled(true);
            SupportActionBar.SetDisplayShowHomeEnabled(true);
            SupportActionBar.Title = "Ustawienia";

            HoursList = FindViewById <MedicationDosageTimeLayout>(Resource.Id.hoursList);
            HoursList.ItemTemplateId = Resource.Layout.time_item;

            addHour = FindViewById <TextView>(Resource.Id.addHourBtn);
            var hoursAdapter = (MedicationDosageTimeListAdapter)HoursList.Adapter;

            hoursAdapter.CLickItem.Subscribe(item =>
            {
                TimePickerDialog timePicker = new TimePickerDialog(
                    this,
                    (s, args) =>
                {
                    if (((TimePicker)s).IsShown)
                    {
                        newItem      = new TimeItem(item.Name);
                        newItem.Hour = new TimeSpan(args.HourOfDay, args.Minute, 0);
                        var id       = this.ViewModel.HoursList.IndexOf(item);
                        if (id >= 0)
                        {
                            this.ViewModel.HoursList.RemoveAt(id);
                            this.ViewModel.HoursList.Insert(id, newItem);
                        }
                    }
                },
                    item.Hour.Hours,
                    item.Hour.Minutes,
                    true);
                timePicker.Show();
            });

            hoursAdapter.DeleteRequested.Subscribe(time => this.ViewModel.HoursList.Remove(time));

            soundLabel        = FindViewById <TextView>(Resource.Id.soundLabel);
            soundLabel.Click += (o, e) =>
            {
                Intent intent = new Intent(RingtoneManager.ActionRingtonePicker);
                intent.PutExtra(RingtoneManager.ExtraRingtoneTitle, true);
                intent.PutExtra(RingtoneManager.ExtraRingtoneShowSilent, false);
                intent.PutExtra(RingtoneManager.ExtraRingtoneShowDefault, true);

                Android.Net.Uri uri;
                if (!String.IsNullOrEmpty(this.ViewModel.RingUri))
                {
                    uri = Android.Net.Uri.Parse(this.ViewModel.RingUri);
                }
                else
                {
                    uri = RingtoneManager.GetDefaultUri(RingtoneType.Alarm);
                }

                intent.PutExtra(RingtoneManager.ExtraRingtoneExistingUri, uri);

                StartActivityForResult(Intent.CreateChooser(intent, "Wybierz dzwonek"), 0);

                //Android.Net.Uri ring = (Android.Net.Uri)intent.GetParcelableExtra(RingtoneManager.ExtraRingtonePickedUri);
            };

            this.snooze        = this.FindViewById <TextView>(Resource.Id.snooze);
            this.snooze.Click += (sender, e) => { this.InputClicked(sender, e, this.ViewModel.SetSnooze, this.ViewModel.SnoozeMinutes, "Drzemka"); };

            this.window        = this.FindViewById <TextView>(Resource.Id.window);
            this.window.Click += (sender, e) => { this.InputClicked(sender, e, this.ViewModel.SetWindow, this.ViewModel.WindowHours, "Okienko 'najbliższe"); };

            SetBinding();
        }