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, 254),
// 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 += $"