using System; using System.Collections.Generic; using TINK.MultilingualResources; using Xamarin.Essentials; namespace TINK.Model { /// Holds information about app development (whats new messages) and info whenther AGB have to be shown or not. public class WhatsNew { private static readonly Version AGBMODIFIEDBUILD = new Version(3, 0, 131); /// Change of of think App. public static WhatsNewMessages AllFlavorsAndPlatformMessages = new WhatsNewMessages { { 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. }, { new Version(3, 0, 263), AppResources.ChangeLog3_0_263 }, { new Version(3, 0, 264), AppResources.ChangeLog3_0_264 }, { new Version(3, 0, 265), AppResources.ChangeLog3_0_265 }, { new Version(3, 0, 266), AppResources.ChangeLog3_0_266 }, { new Version(3, 0, 276), AppResources.ChangeLog3_0_276 }, { new Version(3, 0, 277), AppResources.ChangeLog3_0_277 }, { new Version(3, 0, 279), AppResources.ChangeLog3_0_278 // Addition spelling corrected and missing translation added. }, { new Version(3, 0, 280), AppResources.ChangeLog3_0_280 }, { new Version(3, 0, 281), AppResources.ChangeLog3_0_280 }, { new Version(3, 0, 283), AppResources.ChangeLog3_0_282 }, { new Version(3, 0, 284), AppResources.ChangeLog3_0_284 }, { new Version(3, 0, 285), AppResources.ChangeLog3_0_285 }, { new Version(3, 0, 289), AppResources.ChangeLog3_0_289 }, { new Version(3, 0, 290), AppResources.ChangeLog3_0_290 }, { new Version(3, 0, 297), AppResources.ChangeLog3_0_293 }, { new Version(3, 0, 298), AppResources.ChangeLog3_0_298 }, { new Version(3, 0, 299), AppResources.ChangeLog3_0_299 }, { new Version(3, 0, 300), AppResources.ChangeLog3_0_231 // Minor improvements. }, { new Version(3, 0, 311), AppResources.ChangeLog3_0_301 }, { new Version(3, 0, 312), AppResources.ChangeLog3_0_312 }, { new Version(3, 0, 323), AppResources.ChangeLog3_0_318 // Support for new lock added. }, { new Version(3, 0, 324), AppResources.ChangeLog3_0_324 }, { new Version(3, 0, 333), AppResources.ChangeLog3_0_326 // Battery level display and input. }, { new Version(3, 0, 335), AppResources.ChangeLog3_0_326 // Battery level display and input. }, { new Version(3, 0, 336), AppResources.ChangeLog3_0_335 // Sharee.bike design improved. }, { new Version(3, 0, 337), AppResources.ChangeLog3_0_337_SB, // New Design new List { AppFlavor.ShareeBike } }, { new Version(3, 0, 337), AppResources.ChangeLog3_0_337_MK, // Notice for low battery new List { AppFlavor.MeinKonrad } }, { new Version(3, 0, 337), AppResources.ChangeLog_MinorBugFixes, new List { AppFlavor.LastenradBayern } }, { new Version(3, 0, 338), AppResources.ChangeLog3_0_338_LB_MK, new List { AppFlavor.LastenradBayern, AppFlavor.MeinKonrad } }, { new Version(3, 0, 338), AppResources.ChangeLog3_0_338_SB, new List { AppFlavor.ShareeBike } }, { new Version(3, 0, 339), AppResources.ChangeLog3_0_339_SB_LB, new List { AppFlavor.LastenradBayern, AppFlavor.ShareeBike } }, { new Version(3, 0, 339), AppResources.ChangeLog3_0_339_MK, new List { AppFlavor.MeinKonrad } }, { new Version(3, 0, 344), AppResources.ChangeLog_3_0_343_LB_MK, new List { AppFlavor.LastenradBayern, AppFlavor.MeinKonrad } }, { new Version(3, 0, 344), AppResources.ChangeLog_MinorBugFixes, new List { AppFlavor.ShareeBike } }, { new Version(3, 0, 345), AppResources.ChangeLog_3_0_345_SB_MK, new List { AppFlavor.ShareeBike, AppFlavor.MeinKonrad } }, { new Version(3, 0, 345), AppResources.ChangeLog_3_0_345_LB, new List { AppFlavor.LastenradBayern } }, { new Version(3, 0, 347), AppResources.ChangeLog_3_0_347_LB_MK, new List { AppFlavor.LastenradBayern, AppFlavor.MeinKonrad } }, { new Version(3, 0, 347), AppResources.ChangeLog_3_0_347_SB, new List { AppFlavor.ShareeBike } }, { new Version(3, 0, 348), AppResources.ChangeLog_3_0_348, new List { AppFlavor.LastenradBayern, AppFlavor.MeinKonrad, AppFlavor.ShareeBike }, new List { DevicePlatform.Android } }, { new Version(3, 0, 349), AppResources.ChangeLog_3_0_349, new List { AppFlavor.LastenradBayern, AppFlavor.MeinKonrad, AppFlavor.ShareeBike }, new List { DevicePlatform.Android } }, { new Version(3, 0, 350), AppResources.ChangeLog_3_0_350_SB_MK, new List { AppFlavor.MeinKonrad, AppFlavor.ShareeBike } }, { new Version(3, 0, 351), AppResources.ChangeLog_MinorBugFixes, new List { AppFlavor.MeinKonrad, AppFlavor.ShareeBike } }, { new Version(3, 0, 352), AppResources.ChangeLog_MinorDesignImprovements, new List { AppFlavor.MeinKonrad, AppFlavor.ShareeBike } }, { new Version(3, 0, 353), AppResources.ChangeLog_3_0_353_MK_SB, new List { AppFlavor.MeinKonrad, AppFlavor.ShareeBike } }, { new Version(3, 0, 354), AppResources.ChangeLog_PackageUpdates, new List { AppFlavor.MeinKonrad, AppFlavor.ShareeBike } }, { new Version(3, 0, 355), AppResources.ChangeLog_3_0_355_MK_SB_iOS, new List { AppFlavor.MeinKonrad, AppFlavor.ShareeBike }, new List { DevicePlatform.iOS } }, { new Version(3, 0, 356), AppResources.ChangeLog3_0_231 }, { new Version(3, 0, 360), AppResources.ChangeLog_3_0_358_MK_SB, new List { AppFlavor.MeinKonrad, AppFlavor.ShareeBike } }, { new Version(3, 0, 361), AppResources.ChangeLog_3_0_361_MK_SB, new List { AppFlavor.MeinKonrad, AppFlavor.ShareeBike } }, { new Version(3, 0, 362), AppResources.ChangeLog_3_0_362_MK_SB, new List { AppFlavor.MeinKonrad, AppFlavor.ShareeBike } }, }; /// Manges the whats new information. /// Current version of the app. /// Version of app which was used before this session, null if app is installed for the first time. /// Null or version in which whats new dialog was shown last. Used to determine if AGB dialog has to be shown. /// Flavor of the app, i.e. specified if app is sharee.bike, Lastenrad Bayern, ... /// Platform on which app is running. /// Messages to inject for testing. public WhatsNew( Version currentVersion, Version lastVersion, Version shownInVersion, AppFlavor flavor, DevicePlatform platform, WhatsNewMessages messages = null) { WasShownVersion = shownInVersion; if (currentVersion == null || lastVersion == null) { WasShownInCurrentSession = false; IsShowRequired = false; WhatsNewText = new Dictionary(); return; } WhatsNewText = (messages ?? AllFlavorsAndPlatformMessages).GetFilteredMessages(flavor, platform, WasShownVersion ?? lastVersion, currentVersion); if (WhatsNewText.Count <= 0) { WasShownInCurrentSession = false; IsShowRequired = false; return; } WasShownInCurrentSession = false; IsShowRequired = true; } /// Gets or sets value whehter whats new was alreay shonw in current settion or not. public bool WasShownInCurrentSession { get; set; } /// Holds the information in which version of the app the whats new dialog has been shown. private Version WasShownVersion { get; } /// Holds information whether whats new page was already shown or not. public bool IsShowRequired { get; } /// 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. /// Messages to process. public IDictionary WhatsNewText { get; } } }