using System; using System.Collections.Generic; using TINK.MultilingualResources; namespace TINK.Model { /// Holds information about TINKApp development. public class WhatsNew { private static readonly Version AGBMODIFIEDBUILD = new Version(3, 0, 131); /// Change of of think App. private Dictionary WhatsNewMessages = new Dictionary { { new Version(3, 0, 0, 115), "Benutzeroberfläche verbessert.\r\n\r\n" }, { new Version(3, 0, 120), "Verbesserung: Keine Fehler mehr beim schnellen Tippen.\r\n" + "Offlineanzeige Stationen/ Räderinfo.\r\n\r\n" }, { AGBMODIFIEDBUILD, "Neue Seiten eingebaut\r\n" + "-zum erstmaligem Registrieren\r\n" + "-zur Verwaltung des Benutzerkontos\r\n" + "-zum Zurücksetzen des Passworts\r\n" + "\r\n" + "Anzeige Verbindungsstatus auf den Seiten\r\n" + "-Kartenansicht Fahrradstandorte\r\n" + "-Fahrräder an Station\r\n" + "-Meine Fahrräder\r\n\r\n" }, { new Version(3, 0, 137), "Verschiedene kleine Verbesserungen und Korrekturen.\r\n" }, { new Version(3, 0, 141), "Erste I LOCK IT Unterstützung.\r\n" + "Erweiterte Optionen: Zwei Schlosssimulationen.\r\n" }, { new Version(3, 0, 142), "Sharee Server verfügbar.\r\n" }, { new Version(3, 0, 143), "Geolocation wird am Gerät abgefragt.\r\n" + "Erweiterte Optionen: Genauer Standort kann abgefragt werden, Standortsimulation verfügbar.\r\n" }, { new Version(3, 0, 144), "Diverse Fehler behoben.\r\n" + "Erweiterte Optionen: Texte Auswahlboxen für Copri-Server, Schlosssteuerung und Geolocation verständlicher gemacht.\r\n" }, { new Version(3, 0, 145), "Kleine Fehler behoben.\r\n" + "Erweiterte Option ein/ ausschalten \"Karte auf aktuelle Position ausrichten\" hinzugefügt.\r\n" + "Für gemietete Räder ausserhalb der Reichweite wird Knof \"Schloss suchen\" angezeigt." }, { new Version(3, 0, 146), "Fehler behoben: Aktion Schloss schließen wird jetzt durchgeführt.\r\n" + "Benennung: \"Miete weiterführen\" -> \"Miete fortsetzen\".\r\n" }, { new Version(3, 0, 147), "Erste prototypische Unterstützung des ILOCKIT-Schlosses.\r\n" }, { new Version(3, 0, 148), "Schloss-Guid wird an CORI bei Buchung übermittelt.\r\n" }, { new Version(3, 0, 149), "Schlösser mit neuem Advertisement-Name ISHAREIT+XXXXXXX unterstützt.\r\n" }, { new Version(3, 0, 150), "Verbesserung: Schlossstatus wird nach Öffnen/ Schließen abgefragt.\r\n" }, { new Version(3, 0, 151), "Verbesserungen:\r\n" + "Erweiterte Optionen: Auswahl, ob log-Dateien auf internem Speicher oder SD-Karte abgelegt werden, ist konfigurierbar.\r\n" + "Leistung: Suche nach Bluetooth Schlössern deutlich beschleunigt.\r\n" + "Kleine Textkorrekturen.\r\n." + "Fehlerbehebung: Schloss kann direkt nach Reservierung geöffnet werden.\r\n" }, { new Version(3, 0, 152), "Verbesserungen: Aufforderung zum Aktivieren von Bluetooth beim Öffnen der Seiten Meine Räder und Räder an Station implementiert.\r\n" + "Fehlerbehebung: Seite Meine Räder kann auch geöffnet werden, ohne dass Räder reserviert oder gemietet sein müssen.\r\n" }, { new Version(3, 0, 153), "Stabilität erhöht.\r\n" }, { new Version(3, 0, 154), "Stationen in Freiburg werden angezeigt.\r\n" }, { new Version(3, 0, 155), "Schlosssuche verbessert.\r\n" }, { new Version(3, 0, 156), "Abschalten von Sounds und Alarm für offene, reservierte Räder hinzugefügt.\r\n" + "Kleine Fehler behoben.\r\n" }, { new Version(3, 0, 157), "Versenden von Mail mit Diagnoseinformation funktioniert wieder.\r\n" + "Stationen werden nicht mehr fälschlicherweise ausgeblendet nach Verlassen von Einstellungsseite.\r\n" + "Absturz bei minimieren von App behoben.\r\n" + "Stabilität Bluetoothverbindung bei erstmaligem Verbinden verbessert.\r\n" + "Stabilität Bluetoothverbindung bei wiederholtem Verbinden verbessert.\r\n" + "Absturz bei Drehen von Smartdevice behoben.\r\n" + "Absturz bei minimieren von App behoben.\r\n" }, { new Version(3, 0, 158), "Bugfix: Auf Endgerät mit deutscher Sprache werden Texte wieder auf deutsch angezeigt.\r\n" + "Erweiterung: Räderinfo für TINK-Räder werden nur noch bei Anmeldung mit TINK-Konto angezeigt.\r\n" + "Erweiterung: Anwendergruppeninfotext \"TINK\" bzw. \"Konrad\" wird nur noch angezeigt, wenn Konto ein TINK- bzw. Konradrechte hat.\r\n" }, { new Version(3, 0, 159), "Bugfix: Asynchrone Bluetooth Aktualisierung für Android entfernt, da nicht unterstützt.\r\n" }, { new Version(3, 0, 162), "App umbenannt von TINKApp in sharee.bike.\r\n" }, { new Version(3, 0, 163), "Schlossstatus wird an COPRI übermittelt.\r\n" }, { new Version(3, 0, 164), "Wechsel Standard Lock-Umsetzung: GUID-Verbindungsaufbau wird statt Scan benutzt.\r\n" + "Datenquellen für \"Passwort vergessen\", \"Persönliche Daten Verwalten\", \"Datenschutz\" und \"AGB\" aktualisiert.\r\n" }, { new Version(3, 0, 165), "Menüstruktur überarbeitet.\r\n" }, { new Version(3, 0, 167), "Standardeinstellung geändert: Kartenansicht wird per Default auf aktuelle Position zentriert.\r\n" }, { new Version(3, 0, 168), "Konfigurierbaren Connect Timeout eingebaut.\r\n" + "Impressum, Radinfo und Tarifinfo wird von Server geladen.\r\n" + "Adressen für share.bike erweitert.\r\n" }, { new Version(3, 0, 169), "Verschiedene Fehler behoben.\r\n" }, { new Version(3, 0, 170), "Fehler behoben: nach Sequenz Rad Zurückgeben-Resverieren-Mieten ist wieder Verbindung zu Schloss möglich.\r\n" + "Zielplatform Android 10-Q" }, { new Version(3, 0, 171), "Fehler behoben: nach Sequenz von Homescreen wieder App aktivieren wenn Meine Räder offen ist für nicht mehr zu Crash.\r\n" + "Fehlermeldung verbessert für den Fall, dass Bluetooth abgeschaltet ist." }, { new Version(3, 0, 172), "Spezielle Fehler Schloss blockiert beim Öffnen/ Schließen und Fahrrad in Bewegung beim Schließen werden in Alert angezeigt.\r\n" + "Fehlerzustände werden detaillierter in Alerts angezeigt.\r\n" + "Überprüfung, ob von COPRI gelieferte GUID gültig ist für bekannte Schlösser.\r\n" + "Überprüfung, dass Seed nur einmalig verwendet werden.\r\n" + "Verschiedene kleinere Verbesserungen." }, { new Version(3, 0, 173), "Fehlerzustände werden detaillierter in Alerts angezeigt.\r\n" + "Aktualisierung auf Android 10." }, { new Version(3, 0, 174), "Fehlerkorrketur: GPS-Korrdianten werden länderinvariant übertragen. \r\n" + "Nutzer mit erweiterten Rechten: Alarm- und Soundeinstellungen können verwaltet werden." }, { new Version(3, 0, 175), "Fehlerkorrektur: Nach Bluetooth-Wiederverbindung kann Schloss wieder geöffnet und geschlossen werden." }, { new Version(3, 0, 176), "Wiederholen-/ Abbrechen-Schleife beim Verbinden mit Schlössern umgesetzt. Beim Wiederholen wird die Timeoutzeit jeweils verdoppelt bis zum Faktor vier.\r\n" + "Kein Neustart mehr notwendig nach Änderung der Timeouts." }, { new Version(3, 0, 177), "Beim Schließen des Schlosses wird geänderter Zustand an COPRI übermittelt.\r\n" + "Beim Miete beenden, ohne dass unmittelbar voher das Schloss zu geschlossen wurde, werden keine Koordinaten an COPRI übermittelt.\r\n" + "Meldungen zu nichkritische Fehlern werden in der Statuszeile angezeigt. " }, { new Version(3, 0, 178), "Bei Fehlern bei Radrückgabe Fehlermeldung verbessert.\r\n" + "Activity Indicator (Sanduhr) eingebaut.\r\n" + "Timeout von 3 auf 5 Sekunden erhöht insbesonders für standard Lock-Umsetzung Live-Scan." }, { new Version(3, 0, 179), "Verbesserte Fehlermeldungen bei Statusaktualisierung und Radrückgabe.\r\n" + "Fehlerbehebung: Alter Geoloationinformation wird korrekt übertragen.\r\n" + "Optimierung Benutzung Geolocationcache." }, { new Version(3, 0, 180), "Akkufüllstand wir an COPRI übermittelt beim Schloss öffnen." }, { new Version(3, 0, 190), "Erste Version für iOS." }, { new Version(3, 0, 191), "Für Seiten \"Fahrradstandorte\", \"Meine Räder\" und \"Räder an Station\":\r\n" + "- Activity Indicator (Sanduhr) eingebaut\r\n" + "- Statusmeldungen eingebaut\r\n" + "Karte wird initial auf Verleistationen zentriert.\r\n" + "Geschwindikgeitsverbesserungen und Fehler behoben." }, { new Version(3, 0, 192), "Erweiterung: Benutzerfreundliche Fehlermeldung für Szenario\r\n" + "-Rückgabe außerhalb von Station\r\n" + "-Rückgabe ohne GPS-Info\r\n" + "Standortabfrage bei Radrückgabe von bereits verschlossenem Rad, wenn Schloss in Bluetoothreichweite ist.\r\n" + "Fehlerbehebung: Passwort-Vergessen Funktionaliät wieder verfügbar.\r\n" + "Kontakt-Seite aktualisiert (Telefonnummer, Mail, ...)." }, { new Version(3, 0, 193), "Erweiterte Benutzerrechte können selektiv akiviert werden.\r\n" + "Verschiedene Umbenennungen." }, { new Version(3, 0, 194), "Fehlerkorrektur: Wenn kein Benutzer angemeldet ist werden nur noch öffentliche Stationen angezeigt.\r\n" + "Master-Detail Elemente werden in sharee.bike- Farbe angezeigt." }, { new Version(3, 0, 195), "Fehlerkorrektur: Android action bar an sharee.bike- Farbenschema angepasst." }, { new Version(3, 0, 196), "Fehlerkorrektur: Registrieren-Link korrigiert.\r\n" + "\"Kontakt\"-Seite überarbeitet." }, { new Version(3, 0, 197), "Android: App ist nicht mehr verfügbar Geräte ohne BluetoothLE/ ohne GPS.\r\n" + "iOS:\r\n" + "- Bugfix: Nicht mehr benötigtes Recht \"Standort im Hintergrund\" entfernt.\r\n" + "- Schreibfehler behoben.\r\n" + "Fehlerhandling bei Benutzung von mehr als acht Geräte verbessert." }, { new Version(3, 0, 198), "Fehlermeldungen angepasst.\r\n" }, { new Version(3, 0, 199), "Radbeschreibung auf sharee.bike angepasst.\r\n" + "iOS: Berechtigungsfehler behoben." }, { new Version(3, 0, 200), "Titel von Seite Fahrradstandort verbessert.\r\n" + "Statusmeldungen verbessert." }, { new Version(3, 0, 201), "iOS: Darstellung verbessert.\r\n" + "Weitere Teile der App englischsprachig verfügbar." }, { new Version(3, 0, 202), "Kleinere Verbesserrungen bezüglich Stabilität und Benutzbarkeit.\r\n" }, { new Version(3, 0, 203), AppResources.ChangeLog3_0_203 }, { new Version(3, 0, 204), AppResources.ChangeLog3_0_204 }, { new Version(3, 0, 205), AppResources.ChangeLog3_0_205 }, { new Version(3, 0, 206), AppResources.ChangeLog3_0_206 }, { new Version(3, 0, 207), AppResources.ChangeLog3_0_207 }, { new Version(3, 0, 208), AppResources.ChangeLog3_0_208 // Minor fixes. }, { new Version(3, 0, 209), AppResources.ChangeLog3_0_209 }, { new Version(3, 0, 214), AppResources.ChangeLog3_0_214 }, { new Version(3, 0, 215), AppResources.ChangeLog3_0_215 }, { new Version(3, 0, 216), AppResources.ChangeLog3_0_216 }, { new Version(3, 0, 217), AppResources.ChangeLog3_0_217 }, { new Version(3, 0, 218), AppResources.ChangeLog3_0_208 }, { new Version(3, 0, 219), AppResources.ChangeLog3_0_219 }, { new Version(3, 0, 220), AppResources.ChangeLog3_0_220 }, { new Version(3, 0, 222), AppResources.ChangeLog3_0_222 }, { new Version(3, 0, 223), AppResources.ChangeLog3_0_208 }, { new Version(3, 0, 224), AppResources.ChangeLog3_0_224 }, { new Version(3, 0, 225), AppResources.ChangeLog3_0_208 }, { new Version(3, 0, 226), AppResources.ChangeLog3_0_226 }, { new Version(3, 0, 227), AppResources.ChangeLog3_0_227 }, { new Version(3, 0, 228), AppResources.ChangeLog3_0_208 }, { new Version(3, 0, 231), AppResources.ChangeLog3_0_231 }, { new Version(3, 0, 232), AppResources.ChangeLog3_0_232 }, { new Version(3, 0, 234), AppResources.ChangeLog3_0_234 }, { new Version(3, 0, 235), AppResources.ChangeLog3_0_235 }, { new Version(3, 0, 236), AppResources.ChangeLog3_0_236 }, { new Version(3, 0, 237), AppResources.ChangeLog3_0_237 }, { new Version(3, 0, 238), AppResources.ChangeLog3_0_231 }, { new Version(3, 0, 239), AppResources.ChangeLog3_0_239 }, { new Version(3, 0, 240), AppResources.ChangeLog3_0_240 }, { new Version(3, 0, 241), AppResources.ChangeLog3_0_241 }, { new Version(3, 0, 242), AppResources.ChangeLog3_0_242 }, { new Version(3, 0, 243), AppResources.ChangeLog3_0_243 }, { new Version(3, 0, 244), AppResources.ChangeLog3_0_231 // Minor improvements. }, { new Version(3, 0, 245), AppResources.ChangeLog3_0_231 // Minor improvements. }, { new Version(3, 0, 246), AppResources.ChangeLog3_0_231 // Minor improvements. }, { new Version(3, 0, 247), AppResources.ChangeLog3_0_231 // Minor improvements. }, { new Version(3, 0, 248), AppResources.ChangeLog3_0_231 // Minor improvements. }, { new Version(3, 0, 249), AppResources.ChangeLog3_0_249 // Third-party components updated. }, { new Version(3, 0, 250), AppResources.ChangeLog3_0_250 // Third-party components updated. }, { new Version(3, 0, 260), // Same info as for version 3.0.251 and 3.0.252 AppResources.ChangeLog3_0_231 // Minor improvements. } }; /// Manges the whats new information. /// Current version of the app. /// Null or version in which whats new dialog was shown last. public WhatsNew( Version currentVersion, Version lastVersion, Version shownInVersion) { WasShownVersion = shownInVersion; LastVersion = lastVersion; CurrentVersion = currentVersion; } /// Retruns a new WhatsNew object with property was shown set to true. /// public WhatsNew SetWasShown() { return new WhatsNew(CurrentVersion, LastVersion, CurrentVersion); } /// Holds the information in which version of the app the whats new dialog has been shown. private Version WasShownVersion { get; } /// Holds the information in which version of the app the whats new dialog has been shown. private Version CurrentVersion { get; } private Version LastVersion; /// Holds information whether whats new page was already shown or not. public bool IsShowRequired { get { if (CurrentVersion == null) { // Unexpected state detected. return false; } if (LastVersion == null) { // Initial install detected. return false; } return (WasShownVersion ?? LastVersion) < CurrentVersion; } } /// True if info about modified agb has to be displayed. public bool IsShowAgbRequired => (WasShownVersion ?? AGBMODIFIEDBUILD) < AGBMODIFIEDBUILD; /// Get the whats new text depening of version gap. public string WhatsNewText { get { if (CurrentVersion == null) { // Unexpected state detected. return string.Empty; } if (LastVersion == null) { // Initial install detected. All is new. return string.Empty; } var effectiveWasShownVersion = WasShownVersion ?? LastVersion; // Upgrade from version without whats new dialog detected. var whatsNew = string.Empty; foreach (var l_oInfo in WhatsNewMessages) { if (effectiveWasShownVersion >= l_oInfo.Key) { // What new info for this version entry was already shown. continue; } if (l_oInfo.Key > CurrentVersion) { // This whats new info entry does not yet apply to current version. continue; } whatsNew += $"

{l_oInfo.Key}
{l_oInfo.Value}

"; } return whatsNew; } } } }