/// <summary> /// Wechsel zur Hauptansicht und Speichern der eingegeben Daten. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private async void Speichern_DatenSichernUndWechselZuHauptansicht(object sender, RoutedEventArgs e) { // Sperren der Oberfläche SperrenDerAnsicht(); bool speichernErfolgreich = false; UserEinstellungen einst = new UserEinstellungen(); // Aktueller Wert des Sliders für den Radius einst.Radius = (float)sliderSuchradius.Value; einst.GPSErlaubt = toggleSwitchGPSErlaubnis.IsOn; // Weitere Einstellungen möglich // Speichern der Nutzereinstellungen in einer Datei speichernErfolgreich = await DatenVerarbeitung.UserEinstellungenSpeichern(einst); // Wechsel zur Hauptansicht und Ausgabe des Erfolgs/Misserfolgs beim Speichern if (speichernErfolgreich == true) { this.Frame.Navigate(typeof(FensterHauptansicht)); } else { var message = new MessageDialog(Meldungen.UserEinstellungen.SpeicherFehler, "Fehler!"); await message.ShowAsync(); this.Frame.Navigate(typeof(FensterHauptansicht)); } // Oberfläche entsperren EntsperrenDerAnsicht(); }
/// <summary> /// Abmelden durch Wechsel zur Startansicht (FensterAnmOdReg) und Speichern von Defaultwerten /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private async void btnAbmelden_wechselZuFensterAnmelden(object sender, RoutedEventArgs e) { // Sperren der Oberfläche SperrenDerAnsicht(); // UserEinstellungen auf Default zurücksetzen bool speichernErfolgreich = false; UserEinstellungen einst = new UserEinstellungen(); einst.Radius = 50; // "Neue" Werte speichern speichernErfolgreich = await DatenVerarbeitung.UserEinstellungenSpeichern(einst); // Partyliste aus Zwischenspeichern löschen IEnumerable <Party> liste = null; speichernErfolgreich = await DatenVerarbeitung.PartysSpeichern(liste); // Oberfläche entsperren EntsperrenDerAnsicht(); // Wechsel zum Start this.Frame.Navigate(typeof(FensterAnmOdReg)); }
/// <summary> /// Stellt die Erlaubnis für die GPS-Nutzung ein und fragt bei Änderungen nochmal nach. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private async void toggleSwitchGPSErlaubnis_GPSEinstellen(object sender, RoutedEventArgs e) { // Oberfläche sperren SperrenDerAnsicht(); UserEinstellungen einst = await DatenVerarbeitung.UserEinstellungenAuslesen(); var accessStatus = await Geolocator.RequestAccessAsync(); if (accessStatus == GeolocationAccessStatus.Allowed) { // Status des ToggleSwitches NACH dem Antippen if (toggleSwitchGPSErlaubnis.IsOn == true) { einst.GPSErlaubt = true; } else { einst.GPSErlaubt = false; } } else { einst.GPSErlaubt = false; toggleSwitchGPSErlaubnis.IsOn = false; // Da GPS nicht erlaubt var message = new MessageDialog(Meldungen.UserEinstellungen.FehlerGPS, "Achtung!"); await message.ShowAsync(); } // Neue Einstellungen speichern await DatenVerarbeitung.UserEinstellungenSpeichern(einst); // Oberfläche entsperren EntsperrenDerAnsicht(); }
/// <summary> /// Speichert die übergebenen Einstellungen in die dafür vorgesehene Datei. Falls die Datei schon bestehen sollte, wird diese Überschrieben. /// </summary> /// <param name="einst">Einstellungen zu speichern</param> /// <returns></returns> public static async Task <bool> UserEinstellungenSpeichern(UserEinstellungen einst) { bool erfolg = false; // Zieldatei erstellen/überschreiben speicherDatei = await speicherOrdner.CreateFileAsync(DateiUserEinstellungen, Windows.Storage.CreationCollisionOption.ReplaceExisting); // Kontrolle if (speicherOrdner == null) { var message = new MessageDialog(Meldungen.DatenVerarbeitung.FehlerSpeichern, "Fehler beim Speichern!"); await message.ShowAsync(); return(erfolg); } try { string userEinstellungenAlsString = JsonConvert.SerializeObject(einst); // In Datei schreiben await FileIO.WriteTextAsync(speicherDatei, userEinstellungenAlsString); erfolg = true; } catch (Exception) { var message = new MessageDialog(Meldungen.DatenVerarbeitung.FehlerSpeichern, "Fehler beim Speichern!"); await message.ShowAsync(); return(erfolg); } return(erfolg); }
/// <summary> /// Liest die Daten aus der Datei für die Nutzereinstellungen. /// </summary> /// <returns></returns> public static async Task <UserEinstellungen> UserEinstellungenAuslesen() { UserEinstellungen ausDatei = new UserEinstellungen(); speicherDatei = await speicherOrdner.GetFileAsync(DateiUserEinstellungen); // Daten auslesen string text = await FileIO.ReadTextAsync(speicherDatei); // Bei Fehler in Datei oder beim Auslesen wird null zurückgegeben. if (text != null) { ausDatei = JsonConvert.DeserializeObject <UserEinstellungen>(text); } else { ausDatei = null; } return(ausDatei); }
/// <summary> /// Auslesen des vom Nutzer gesetzten Suchradius aus einer Datei und Anzeigen durch Slider. /// </summary> private async void SuchRadiusUndGPSEinstellen() { UserEinstellungen einst = await DatenVerarbeitung.UserEinstellungenAuslesen(); if (einst.Radius != 0) { sliderSuchradius.Value = einst.Radius; } else { sliderSuchradius.Value = 50; } if (einst.GPSErlaubt == true) { toggleSwitchGPSErlaubnis.IsOn = true; } else { toggleSwitchGPSErlaubnis.IsOn = false; } }
/// <summary> /// Gibt die aktuellen Partys aus der Umgebung zurück. /// </summary> /// <returns></returns> private static async Task <IEnumerable <Party> > btnInDerNaehePartysAbrufen() { IEnumerable <Party> partyListe = null; Location pos; try { // Aktuelle Position ermitteln var geoLocation = new GeolocationLogik(); pos = await geoLocation.GetLocation(); } catch (Exception) { var message = new MessageDialog(Meldungen.Hauptansicht.FehlerGPSNoetig, "Achtung!"); await message.ShowAsync(); return(null); } // Radius aus UserEinstellungen UserEinstellungen einst = await DatenVerarbeitung.UserEinstellungenAuslesen(); float radius = einst.Radius; // Liste der Partys vom BackEnd erhalten partyListe = await BackEndComPartyLogik.GetParties(pos, radius); // Zwischenspeichern der aktuell angezeigten Partys bool erfolg = await ListViewAuslesenUndZwischenspeichern(partyListe); if (erfolg == false) { var message = new MessageDialog(Meldungen.Hauptansicht.FehlerZwischenSpeichern, "Fehler beim Speichern für Offline-Nutzung!"); } return(partyListe); }
/// <summary> /// Zeigt die Partys in der Umgebung an. Suchradius wird in UserEinstellungen geändert. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> public async void Suchen_abrufenPartys(object sender, RoutedEventArgs e) { // Sperren der Oberfläche SperrenDerAnsicht(); // Listen leeren listViewSuchErgebnis.Items.Clear(); listViewVorgemerkt.Items.Clear(); listViewTeilnahme.Items.Clear(); UserEinstellungen einst = await DatenVerarbeitung.UserEinstellungenAuslesen(); if (einst.GPSErlaubt == true) { // Liste der Partys aus der Nähe partyListe = await btnInDerNaehePartysAbrufen(); // Anzeigen der Partys in der "normalen" Liste und ggf. in der Liste für die vorgemerkten Partys. if (partyListe.Any()) { anzahlPartys = partyListe.Count(); for (int durchlauf = 0; durchlauf < anzahlPartys; durchlauf++) { // Liste aller Partys in der Nähe werden in der "normalen" ListView angezeigt party = partyListe.ElementAt(durchlauf); listViewSuchErgebnis.Items.Add(party.PartyName); // Auf der Karte anzeigen PartyAufMapAnzeigen(party); // Liste der vorgemerkten Partys werden in einer separaten ListView angezeigt if (party.UserCommitmentState == EventCommitmentState.Noted) { listViewVorgemerkt.Items.Add(party.PartyName); anzahlVorgemerkt++; } // Liste der Partys, bei denen der Nutzer teilnimmt, werden in einer separaten ListView angezeigt if (party.UserCommitmentState == EventCommitmentState.Accepted) { listViewTeilnahme.Items.Add(party.PartyName); anzahlTeilgenommen++; } } } else { var message = new MessageDialog(Meldungen.Hauptansicht.KeinePartysInDerNaehe, "Schade!"); await message.ShowAsync(); } } else { var message = new MessageDialog(Meldungen.Hauptansicht.FehlerGPSNoetig, "Achtung!"); await message.ShowAsync(); } // Oberfläche entsperren EntsperrenDerAnsicht(); }
/// <summary> /// Gibt den aktuellen Standort als Latitude und Longitude zurück. /// </summary> /// <returns>Aktuellen Standort des Nutzers</returns> public async Task <Location> GetLocation() { // Code von http://stackoverflow.com/questions/32323942/windows-universal-uwp-geolocation-api-permissions CancellationTokenSource _cts; // Erlaubnis zwischenspeichern UserEinstellungen einst = new UserEinstellungen(); einst = await DatenVerarbeitung.UserEinstellungenAuslesen(); try { // Request permission to access location var accessStatus = await Geolocator.RequestAccessAsync(); if (accessStatus == GeolocationAccessStatus.Allowed) { einst.GPSErlaubt = true; await DatenVerarbeitung.UserEinstellungenSpeichern(einst); // Get cancellation token _cts = new CancellationTokenSource(); CancellationToken token = _cts.Token; // If DesiredAccuracy or DesiredAccuracyInMeters are not set (or value is 0), DesiredAccuracy.Default is used. Geolocator geolocator = new Geolocator { DesiredAccuracyInMeters = 100 }; // Carry out the operation var _pos = await geolocator.GetGeopositionAsync().AsTask(token); return(new Location() { Latitude = (float)_pos.Coordinate.Point.Position.Latitude, Longitude = (float)_pos.Coordinate.Point.Position.Longitude }); } else if (accessStatus == GeolocationAccessStatus.Denied) { // Wenn der Nutzer der App nicht den Standort zur Verfügung stellt, wird der Nutzer infomiert, dass die App dann nicht komplett verwendet werden kann einst.GPSErlaubt = false; await DatenVerarbeitung.UserEinstellungenSpeichern(einst); var message = new MessageDialog(Meldungen.Hauptansicht.FehlerGPSNoetig, "Achtung!"); return(null); } else { throw new Exception("Problem with location permissions or access"); } } catch (TaskCanceledException tce) { throw new Exception("Task cancelled" + tce.Message); } finally { _cts = null; } }
/// <summary> /// Erstellen des neuen Nutzers und bei Erfolg wechseln zur Hauptansicht. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private async void Bestaetigen_WechselZuHauptansicht(object sender, RoutedEventArgs e) { bool status = false; bool erfolg = false; bool speichernErfolgreich = false; // Daten auslesen neuerNutzer.Username = textBoxRegNUTZERNAME.Text; neuerNutzer.Email = textBoxRegEMAIL.Text; // Oberfläche sperren SperrenDerAnsicht(); if (pwBoxPASSWORT.Password == pwBoxPASSWORTBEST.Password) { // Speichern des Passworts neuerNutzer.Password = pwBoxPASSWORTBEST.Password; // Anlegen des neuen Nutzers status = await BackEndComUserLogik.CreateUser(neuerNutzer); progRingReg.Visibility = Visibility.Collapsed; progRingReg.IsActive = false; // Abhängig vom Erfolg/Misserfolg beim Erstellen wird eine Nachricht angezeigt und ggf. die Ansicht gewechselt. if (status == true) { var message = new MessageDialog(Meldungen.Registrierung.ErfolgEins + neuerNutzer.Email.ToString() + Meldungen.Registrierung.ErfolgZwei, "Nutzer erfolgreich registriert!"); await message.ShowAsync(); // Speichern der Login-Daten erfolg = await DatenVerarbeitung.LoginSpeichern(neuerNutzer); // UserEinstellungen auf Default zurücksetzen UserEinstellungen einst = new UserEinstellungen(); einst.Radius = 50; einst.GPSErlaubt = false; // "Neue" Werte speichern speichernErfolgreich = await DatenVerarbeitung.UserEinstellungenSpeichern(einst); if (erfolg == true && speichernErfolgreich == true) { // Wechsel zur Hauptansicht this.Frame.Navigate(typeof(FensterHauptansicht)); } else { message = new MessageDialog(Meldungen.Registrierung.SpeicherFehler, "Fehler beim Speichern!"); await message.ShowAsync(); } } else { var message = new MessageDialog(Meldungen.Registrierung.ErstellenFehler, "Fehler beim Erstellen!"); await message.ShowAsync(); } } else { var message = new MessageDialog(Meldungen.Registrierung.PasswortFehler, "Passwörter sind nciht identisch!"); await message.ShowAsync(); } // Entsperren der Oberfläche EntsperrenDerAnsicht(); }
/// <summary> /// Hier werden die Daten vom Nutzer validiert. Entweder ändert sich die Anzeige (korrekte Daten) oder der Nutzer erhält eine Nachricht, /// dass die eingegeben Daten falsch sind. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private async void Anmelden_WechselZuHauptansicht(object sender, RoutedEventArgs e) { bool korrekteEingabe = false; bool speichernErfolgreich = false; bool einstellungenErfolgreich = false; // UserEinstellungen auf Default zurücksetzen UserEinstellungen einst = new UserEinstellungen(); einst.Radius = 50; einst.GPSErlaubt = false; // "Neue" Werte speichern speichernErfolgreich = await DatenVerarbeitung.UserEinstellungenSpeichern(einst); // Partyliste aus Zwischenspeichern löschen IEnumerable <Party> liste = null; speichernErfolgreich = await DatenVerarbeitung.PartysSpeichern(liste); anmeldung.Username = txtBoxAnmNUTZERNAME.Text; anmeldung.Email = txtBlAnmEMAIL.Text; anmeldung.Password = pwBoxPASSWORT.Password; // Sperren der Ansicht SperrenDerAnsicht(); korrekteEingabe = await DatenVerarbeitung.LoginUeberpruefen(anmeldung); if (korrekteEingabe == true) { // Speichern der Anmeldedaten in eine Textdatei speichernErfolgreich = await DatenVerarbeitung.LoginSpeichern(anmeldung); // Default-Radius für Suchumfeld in Datei speichern einstellungenErfolgreich = await DatenVerarbeitung.UserEinstellungenSpeichern(einst); if (speichernErfolgreich == true && einstellungenErfolgreich == true) { // Wenn alles erfolgreich gespeichert wurde progressRingAnmeldung.Visibility = Visibility.Collapsed; progressRingAnmeldung.IsActive = false; var message = new MessageDialog(Meldungen.Anmeldung.Erfolg, "Erfolg!"); await message.ShowAsync(); this.Frame.Navigate(typeof(FensterHauptansicht)); } else { var message = new MessageDialog(Meldungen.Anmeldung.UnbekannterFehler, "Unbekannter Fehler!"); await message.ShowAsync(); } } else { var message = new MessageDialog(Meldungen.Anmeldung.Misserfolg, "Fehler bei der Anmeldung!"); await message.ShowAsync(); } // Oberfläche entsperren EntsperrenDerAnsicht(); }