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(); }
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(); }