From 56115524dd688e0e44e3b403e159bb711d85f0a4 Mon Sep 17 00:00:00 2001 From: Nucleus Date: Fri, 21 Aug 2026 18:45:06 +0200 Subject: [PATCH 1/4] Prepare release 1.1.0 alpha3 --- lib/constants.dart | 2 +- lib/services/legacy_handler.dart | 2 +- lib/widgets/dialogs/change_log_dialog.dart | 4 +++- pubspec.yaml | 2 +- test/legacy_handler_test.dart | 16 ++++++++-------- 5 files changed, 14 insertions(+), 12 deletions(-) diff --git a/lib/constants.dart b/lib/constants.dart index 78ed8320..69a781ba 100644 --- a/lib/constants.dart +++ b/lib/constants.dart @@ -1,6 +1,6 @@ const String defaultFPASServerUrl = "alerts.kde.org"; const String httpUserAgent = - "FOSSWarn/1.0.1 (Android)"; //@TODO (Nucleus) fetch data automatically + "FOSSWarn/1.1.0 (Android)"; //@TODO (Nucleus) fetch data automatically const List serverThatAreNotWorking = ["ntfy.sh"]; const List serversWithIssues = ["unifiedpush.kde.org"]; diff --git a/lib/services/legacy_handler.dart b/lib/services/legacy_handler.dart index d80caf0b..a5212083 100644 --- a/lib/services/legacy_handler.dart +++ b/lib/services/legacy_handler.dart @@ -31,7 +31,7 @@ Future legacyHandler() async { preferences.setBool("showUpdateDialog", true); } - if (previousVersionCode < 45) { + if (previousVersionCode < 44) { // we let the software handle https now so the user don't has to deal with that anymore // but we need to adapt the stored address to remove the http scheme String? serverUrl = preferences.getString("fossPublicAlertServerUrl"); diff --git a/lib/widgets/dialogs/change_log_dialog.dart b/lib/widgets/dialogs/change_log_dialog.dart index f6512b90..191c2247 100644 --- a/lib/widgets/dialogs/change_log_dialog.dart +++ b/lib/widgets/dialogs/change_log_dialog.dart @@ -17,7 +17,9 @@ class ChangeLogDialog extends StatelessWidget { style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold), ), Text("* add notification filter based on alert categories\n" - "* bugfix \n"), + "* add feature to get alerts for the current location\n" + "* general improvements \n" + "* bugfixes \n"), Text( "1.0.1", style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold), diff --git a/pubspec.yaml b/pubspec.yaml index 51c83319..2b9e98cb 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,7 +1,7 @@ name: foss_warn description: A FOSS client for the FOSS Public Alert Server publish_to: 'none' -version: 1.1.0-alpha2+44 +version: 1.1.0+44 environment: sdk: ">=3.6.2 <4.0.0" diff --git a/test/legacy_handler_test.dart b/test/legacy_handler_test.dart index 77fd91c7..57bebc6c 100644 --- a/test/legacy_handler_test.dart +++ b/test/legacy_handler_test.dart @@ -6,7 +6,7 @@ import 'package:shared_preferences_platform_interface/in_memory_shared_preferenc import 'package:shared_preferences_platform_interface/shared_preferences_async_platform_interface.dart'; /// The build number the "installed" app reports during these tests. -const String currentBuildNumber = "45"; +const String currentBuildNumber = "44"; void main() { TestWidgetsFlutterBinding.ensureInitialized(); @@ -32,7 +32,7 @@ void main() { await legacyHandler(); final preferences = SharedPreferencesState.instance; - expect(preferences.getInt("previousInstalledVersionCode"), 45); + expect(preferences.getInt("previousInstalledVersionCode"), 44); expect(preferences.getBool("showUpdateDialog"), isNull); }); @@ -54,12 +54,12 @@ void main() { preferences.getString("fossPublicAlertServerUrl"), "alerts.example.org", ); - expect(preferences.getInt("previousInstalledVersionCode"), 45); + expect(preferences.getInt("previousInstalledVersionCode"), 44); }); test('the url migration also strips a plain http scheme', () async { final preferences = SharedPreferencesState.instance; - await preferences.setInt("previousInstalledVersionCode", 44); + await preferences.setInt("previousInstalledVersionCode", 43); await preferences.setString( "fossPublicAlertServerUrl", "http://alerts.example.org", @@ -75,7 +75,7 @@ void main() { test('a url without a scheme is left alone', () async { final preferences = SharedPreferencesState.instance; - await preferences.setInt("previousInstalledVersionCode", 44); + await preferences.setInt("previousInstalledVersionCode", 43); await preferences.setString("fossPublicAlertServerUrl", "alerts.kde.org"); await legacyHandler(); @@ -85,7 +85,7 @@ void main() { test('the retired areWarningsFromCache flag is removed', () async { final preferences = SharedPreferencesState.instance; - await preferences.setInt("previousInstalledVersionCode", 44); + await preferences.setInt("previousInstalledVersionCode", 43); await preferences.setBool("areWarningsFromCache", true); await legacyHandler(); @@ -103,12 +103,12 @@ void main() { expect(preferences.getString("MyPlacesListAsJson"), isNull); expect(preferences.getBool("showWelcomeScreen"), isNull); - expect(preferences.getInt("previousInstalledVersionCode"), 45); + expect(preferences.getInt("previousInstalledVersionCode"), 44); }); test('reopening the same version migrates nothing', () async { final preferences = SharedPreferencesState.instance; - await preferences.setInt("previousInstalledVersionCode", 45); + await preferences.setInt("previousInstalledVersionCode", 44); await preferences.setString( "fossPublicAlertServerUrl", "https://alerts.example.org", From 03165bdc5bdeb691b983624ab763d36c3178aa90 Mon Sep 17 00:00:00 2001 From: Nucleus Date: Sat, 22 Aug 2026 15:32:52 +0200 Subject: [PATCH 2/4] Move changelog to docs and replace old dialog with link --- docs/docs/en/release_notes/32.md | 50 +++ docs/docs/en/release_notes/38.md | 44 +++ docs/docs/en/release_notes/41.md | 41 +++ docs/docs/en/release_notes/44.md | 48 +++ docs/mkdocs.yml | 5 + .../metadata/android/en-US/changelogs/44.txt | 6 + lib/l10n/app_en.arb | 2 + lib/views/about_view.dart | 21 +- lib/widgets/dialogs/change_log_dialog.dart | 285 ------------------ 9 files changed, 210 insertions(+), 292 deletions(-) create mode 100644 docs/docs/en/release_notes/32.md create mode 100644 docs/docs/en/release_notes/38.md create mode 100644 docs/docs/en/release_notes/41.md create mode 100644 docs/docs/en/release_notes/44.md create mode 100644 fastlane/metadata/android/en-US/changelogs/44.txt delete mode 100644 lib/widgets/dialogs/change_log_dialog.dart diff --git a/docs/docs/en/release_notes/32.md b/docs/docs/en/release_notes/32.md new file mode 100644 index 00000000..58fa72c6 --- /dev/null +++ b/docs/docs/en/release_notes/32.md @@ -0,0 +1,50 @@ +This release has once again taken longer than expected, but I think it was worth the wait. This release brings long-wanted features like a map view and is the first release of FOSSWarn, which is funded by NL-Net. As the project is now funded by public money, I would like to give you a more detailed overview of what has happened, what challenges we had, and what comes next. + +So first of all: +What's new in FOSSWarn 0.8.0? + +The new version brings the following changes: + +- The CAP data structure +- A map view +- An error logger +- Preparations for version 1.0.0 for the FOSS Public Alert Server +- A thread view of updated alerts +- some bug fixes + +CAP data structure + +As I started the project, I wasn't aware of the CAP standard, so I implemented the data structure as I thought would be the best. This was fine in the beginning, but I noticed the limitations later. Therefore, I had to rethink the data structure to make FOSSWarn more future-proof, also with the FOSS Public Alert Server already in mind. FOSSWarn now follows internally, mostly the CAP, too. As one of the consequences of the new data structure and to improve the code quality, I also removed the old legacy API, which was still used to display all alerts if the option "Display all available alerts" was activated. This was replaced by the new API. +The new map View + +This features was on the wish list since the beginning of this project. For a long time, this feature was blocked because I was unsure which OpenStreetMap tiles server (aka the server that gives you the rendered PNGs with the map on it) I could use without any budget. I got the hint that I could use the official server with their permission. So, I asked and got permission. + +Handling maps and polygons brings some challenges. The first challenge was to implement a dark mode for the map. I realized that the official OSM tile server does not render a dark mode theme for the map. As I didn't want to blind all the dark mode users, I had to find a workaround. The workaround was then to manipulate the colors of the PNGs. The best solution was to invert the color by 100%, rotate the hue by 180deg, reduce brightness to 95%, and set contrast to 90%, resulting in the map's current dark theme. Let me know what you think about the color theme. + +The next step was to draw the polygons on the map. This required some changes in the existing codes as I had not fetched the geoJson files for every alert before. As I already rebuilt the data structure, I also changed the API logic and also fetched every geoJson file. One side effect was that the speed of API requests decreased a bit. For a handful of places, this isn't noticeable, but the view of all available alerts is significantly slower now. As the overview of all available alerts is probably only used out of curiosity, that is manageable. + +Polygons also tend to be too detailed, which results in some performance issues. To avoid problems, we use the Douglas Peucker algorithm to reduce the complexity of polygons. This is just the first implementation and will be further improved in the future. +Error Logger + +One feature that makes debugging a lot easier is the new error logger. The error logger is quite simple as it just writes any error thrown into a log file and displays a dialog to the user. The log file is (of couse) locally on your devices. There is no automatic transmission of log informations to a server. However, if an error occurs and you open a Github issue, you can attach the corresponding part of the log file there. This will make it a lot easier to find and fix the error. +Preparation for FPAS + +This version will be the last version with direct support for the Nina-APIs. Starting with version 1.0.0 FOSSWarn will completely switch to our new FOSS Public Alert Server. Volker Krause and I are developing this server, which will feature emergency alerts for over 100 countries and push notifications via unifiedPush. This release already contains a lot of code changes for FPAS, but these have not been activated in this release yet. One of the preparations that is already visible is the new view to select a place. You can find the dialog as feature preview in the development settings. The new view searches with nomination for places and lets the user choose a polygon on the map, which will then be subscribed for. +Thread view of updated alerts + +FOSSWarn now displays only the latest alert in the overview. If there are any previous alerts, the alert will have an additional icon that leads to a thread view of the current and all previous alerts. Notice: If the previous alert is removed from the server, FOSSWarn will not display it anymore. +Bugfixes + +This release fixes some bugs. Among others, we fixed: + +- a bug with the read status of alerts. This bug is fixed for now but will require some more changes in the future to create a cleaner solution. +- in the detailed view of a warning, some tags were challenging to read due to a poor contrast value + +Team changes + +The majority of the work on FOSSWarn is done by myself. But I also have some contributors. Thanks to every weblate contributor who helped translate the app. This release also brings some updated translations. + +Previously, Mats had helped out with the project. Unfortunately, he doesn't have the time anymore. Thanks for your work. +Next steps + +The next step will be version 1.0.0, with the first stable support for the FOSS Public Alert Server. You can follow the development on gitlab or follow the Mastodon account diff --git a/docs/docs/en/release_notes/38.md b/docs/docs/en/release_notes/38.md new file mode 100644 index 00000000..6f4ed789 --- /dev/null +++ b/docs/docs/en/release_notes/38.md @@ -0,0 +1,44 @@ +After a long development phase, it is now time to publish the next release of FOSSWarn. Version 1.0.0 brings a lot of changes and states out the future of this project. + +A lot has happened since the last stable release with version 0.8.1. Basically, no code line stayed untouched. This release note gives you an overview of what has happened, what the state is today, and what will happen in the future. + +What's new or changed in version 1.0.0? + +- code refactoring +- replaced the old APIs with the FOSS Public Alert Server API +- use push notifications now +- auto refresh instead of pull to refresh +- updated dialogs +- Linux support +- Bug fixes + +Code refactoring + +Refactoring is a permanent task to constantly improve the code quality and to clean-up the codebase. With a lot of the help of @pureTryOut, we changed the naming scheme of files, replaced old plugins like the 'provider' with 'riverpod', implemented a new view routing with GoRouter, and improved the code structure in general. +FOSS Public Alert Server + +This is the major change in this new version. We are now using the FOSS Public Alert Server to receive push notifications about alerts. The FOSS Public Alert Server is being developed by KDE and the FOSSWarn team. Over the last year, we developed this server to aggregate and distribute CAP alerts globally. This not only allows FOSSWarn to be used in more countries but also provides the first open source push notification infrastructure for emergency alerts. We are using the open source and decentralized UnifiedPush system to deliver near-real-time notifications about alerts. + +This completely replaced the old polling for alerts and should drastically reduce delays and improve the battery life. Developing our own server also allows us to ensure that we do not rely on undocumented third-party APIs. This is now handled by the server. +Test alerts + +The new system required new testing methods. Therefore, we developed a test alert system on the server. To avoid interference with real alerts, we publish alerts at the point of the Earth with the largest distance to the nearest coast. This place is also called Point Nemo. In the developer options of FOSSWarn, you can subscribe to these alerts. You should receive a new test alert every 5 minutes. +Auto refresh instead of pull-to-refresh + +This is one of the noticeable changes in the UX of the new app version. If you are on the "My Places view" or the "all Warnings view", there is no option to pull to refresh anymore - instead, the app updates automatically as long as it is open. +Updated dialogs + +The implementation of the FOSS Public Alert Server required updating some dialogs. The introduction has now been updated, and there are some new dialogs, e.g., for missing UnifiedPush distributors. We used the opportunity to update the graphics in the introduction to give it a more unified look. +Linux support + +FOSSWarn now supports Linux. This brings the app closer to Linux desktop applications or even Linux on mobile applications. This was mainly done by @PureTryOut. We are still working on packaging the app and bringing it into the Flathub store. This will still take some time, but experienced users can already try out the GitHub release. +Bug fixes + +In the process, we fixed, created, and fixed again a lot of small or medium bugs. It is expected that there will be some minor bugs that will be fixed with some bug-fix releases. +Next steps + +First of all, we need to see how the server can handle more users. Currently, we only have about 150 subscriptions. We expect that this number will increase as soon as the update reaches the F-Droid store. After that, we will see if we need to fix things on the server side. + +We plan to implement improved filtering for alerts to allow more precise settings for which event type you would like to receive alerts and for which not. We also need to re-implement the silent notifications for updated alerts. + +In a later release, we also plan to implement an automatic location-based subscription for alerts. \ No newline at end of file diff --git a/docs/docs/en/release_notes/41.md b/docs/docs/en/release_notes/41.md new file mode 100644 index 00000000..a4ca842b --- /dev/null +++ b/docs/docs/en/release_notes/41.md @@ -0,0 +1,41 @@ +The transition from 0.8.1 to version 1.0.0 and the big change to push notifications and a new server were not as smooth as hoped. A lot of people struggled with the new push notification setup, as it was not that straightforward. Together with some server issues (a ddosed server and other servers that rate-limited us), this resulted in a large number of emails, social media posts, and GitHub issues to address. It took quite some time to answer all of them. Creating a detailed explanation of how to set up the push notification in the wiki helped, but the page could have been more visible. Version 1.0.1 addresses some of the issues and bugs. + +What's changed in version 1.0.1? + +- fix bug with swapped coordinates after a resubscribe +- add a notification self-check view +- add a new dialog to change the UnifiedPush distributor +- other bug fixes + +Fix bug with swapped coordinates after a resubscribe + +To permanently store subscriptions on the disk, we have to serialize and deserialize the data. Therefore, the coordinates from the LatLng objects are transformed to JSON and stored on the disk, and if the app is started the next time, this JSON object is loaded, and the coordinates are transformed back to a LatLng object. Unfortunately, the LatLng.toJson returns the coordinates in the order [longitude, latitude], but we expected that the coordinates would be in the order [latitude, longitude]. This minor bug resulted in swapped coordinates. As long as the subscription was active, this was not noticeable, but if the subscription expired and the user clicked on the resubscribe button, the subscription was for a completely different area of the world. This indicates that we will have a long way to go in testing to prevent introducing similar bugs in the future. +Notification Self-Check + +A lot of users complain about missing tools to verify that the push notifications are working. So this update adds a self-check to test the complete notification chain. The current check tests: + +- if the app has the permission to send notifications +- if there is a UnifiedPush distributor installed on the system +- if the app is registered for push-notifications +- if the app is able to subscribe with the current config +- if the selected server is known for issues +- if the notification arrives on the device + +There is also a new wikipage to explain the tests: https://github.com/nucleus-ffm/foss_warn/wiki/Notification-self-check +Simpler way to change the unifiedpush distributor + +This update adds a new dialogue to easily change the used UnifiedPush distributor. This also automatically updates every subscription with the new push notification configuration. + +I hope that these checks help to identify the most common issues. +Other bug fixes + +A bug with parsing BiWapp alerts is now fixed. +Next steps + +Push notifications are a great feature, but the UnifiedPush setup is not as convenient and reliable as it should be. I hope that every component will improve in the future and that we reach a point where no one has to worry about receiving push notifications, and the system just works. Until then, we will bring back the legacy polling mode, which does not require a working push notification setup. Until recently, a bug in the UnifiedPush connector prevented us from using the AlarmManager (which is required for this type of polling) together with Push notifications using UnifiedPush. This bug should be fixed in the meantime, and we can implement the polling mode as a fallback. +Next Events + +I will be attending the Chaos Communication Congress this year. Volker Krause and I might have a small self-organized session about the FOSS-Public-Alert-Server and FOSSWarn. Feel free to visit us at KDE. If we have details about our self-organized session, we will post that on Mastodon. Make sure to follow us there. +Do you want to help? + +There is a lot to do, and we could use any help we can get. If you are interested in coding, communication, or just helping with testing, join our Matrix space and contact us. \ No newline at end of file diff --git a/docs/docs/en/release_notes/44.md b/docs/docs/en/release_notes/44.md new file mode 100644 index 00000000..8d2a98f1 --- /dev/null +++ b/docs/docs/en/release_notes/44.md @@ -0,0 +1,48 @@ +# 1.1.0: Bring FOSSWarn to a stable state again. + +It has been a journey since the release of version 1.0.0. Many things were not working as expected, so version 1.0.1 focused on fixing some bugs. But there were still many remaining. User complained about the removal of features present in version < 1.0.0, and the entire push notification system proved unreliable. +So this release focuses on bringing FOSSWarn back on track. + + +What's new or changed in version 1.1.0 compared to 1.0.1? + +- Over 150 commits just with bug fixes. +- A new feature to get alerts for the current location +- Implement an alert filtering based on the alert categories +- Implement an alternative to push notifications +- Some small UI improvements +- A brand-new documentation hosted on docs.fosswarn.org + + + +## Bug fixes +This turned out to be a bigger thing than expected. FOSSWarn was full of both minor and major bugs. Some things were known issues, and I was lacking the time to finally fix them. Other things were noticeable while using the app, but I did not know where this was coming from, and some aspects were just working, but could have failed at some point in the future. People who are interested in all the improvements take a look at the commit messages. +There are still some known issues remaining that need to be addressed in the future, but hopefully, I caught the most important ones now. Let's see. + + +## Alerts for current location +A feature that was on my own wishlist since starting to work on the FOSS Public Alert Server was getting alerts automatically for your current location. You can now enable this optional feature in the settings, and FOSSWarn will subscribe to your current location, and you will get +alerts at this location. FOSSWarn currently tries to update the location every 1.5h. This is still an experimental feature, so expect it not to be perfect. One known limitation is that you might get notifications twice +if you manually select the same area, as the current location feature is also subscribed to. +Try it out and let me know what you think and how it works for you. + + +## Alert filtering based on the alert categories +Long-time users will remember that in version < 1.0.0, FOSSWarn provided a feature to select the alert notifications they want to get based on the alert source. This feature was not usable anymore with the server. Listing >150 sources was not a suitable approach, so this feature was removed. Of course, the user complained about that, and indeed, this was +a lacking feature. This release introduces a new filtering feature. This filtering is based on the alert categories that are defined in the CAP standard. You can now select either a global level or, if you want, select a higher level for some alert categories. Like this, you can, e.g., only get severe weather alerts but minor alerts in +all other categories. This is an effective and even better replacement for the old filtering. + +## Alternative to push notifications +Push notifications are the way to go, and the FOSS community must work on making them easy to use and reliable. Bother is currently limited, and some others just do not want to use them. So this brings back a similar feature that was used in the previous version. If you select "legacy polling," FOSSWarn can wake up in periods to check for new notifications. This will delay notifications and drain your battery more than push notifications, but it is simple and requires no additional applications or push server. As I was working +on it, I directly added two more modes. One is to combine push and poll. So, using the polling as backup in case +push fails (still very much experimental) or disabling notification at all if you only want to see +alerts when you open the app. To test if everything is working, you can subscribe to Point Nemo and +get test notifications every 5 minutes. + +Side note: In the developer options, there is now a toggle to turn off the search map search restriction. If you turn that off, you can search for everything (also for point Nemo) that OSM has to offer. + +## UI improvements +While implementing bug fixes and other features, I made some small touches to the UI. + +## Documentation +To reduce my email volume and improve the user experience, I wrote documentation for FOSSWarn. Hosted under docs.fosswarn.org. It provides basic information and an explanation to make FOSSWarn self-understandable. The docs will be expanded in the future, and I would really appreciate any help with that. It's just Markdown, so there is no reason why you can not help improve these docs. Check it out. \ No newline at end of file diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index 6981455c..533dbdf0 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -52,6 +52,11 @@ nav: - Location Tracking: features/location_tracking.md - Notification Setting: features/notification_settings.md - Notification Self Check: features/notification_self_check.md + - Release Notes: + - 0.8.0: release_notes/32.md + - 1.0.0: release_notes/38.md + - 1.0.1: release_notes/41.md + - 1.1.0: release_notes/44.md - FAQ: faq.md - Contribute: contribute.md diff --git a/fastlane/metadata/android/en-US/changelogs/44.txt b/fastlane/metadata/android/en-US/changelogs/44.txt new file mode 100644 index 00000000..abff7e05 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/44.txt @@ -0,0 +1,6 @@ +- Over 150 commits just with bug fixes. +- A new feature to get alerts for the current location +- Implement an alert filtering based on the alert categories +- Implement an alternative to push notifications +- Some small UI improvements +- A brand-new documentation hosted on docs.fosswarn.org \ No newline at end of file diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index db1afc9d..785d9d7e 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -182,6 +182,8 @@ "about_sourcecode_subtitle": "Soon on floppy, meanwhile on github", "about_faq": "FAQ", "about_docs": "Documentation", + "about_release_notes": "Release notes", + "about_release_notes_subtitle": "Learn what has changed in this version.", "privacy_headline": "Privacy", "privacy_main_text": "FOSS Warn does not send any information about its usage and only connects to the following services:\n - the FPAS server: this server handles the subscriptions, sends push notifications and can be selected in the settings. \n - opensteetmap.org: Used to display the map and to search for places. \nFOSS Warn transmits only the technically necessary data.", "privacy_link_to_privacy": "To the privacy policy of", diff --git a/lib/views/about_view.dart b/lib/views/about_view.dart index a8c9041b..ab3c0788 100644 --- a/lib/views/about_view.dart +++ b/lib/views/about_view.dart @@ -4,7 +4,6 @@ import 'package:foss_warn/widgets/dialogs/disclaimer_dialog.dart'; import 'package:package_info_plus/package_info_plus.dart'; import '../services/url_launcher.dart'; import '../widgets/dialogs/privacy_dialog.dart'; -import '../widgets/dialogs/change_log_dialog.dart'; class AboutView extends StatefulWidget { const AboutView({ @@ -209,12 +208,20 @@ class _AboutViewState extends State { "$versioncode ($buildNumber)", style: theme.textTheme.bodyLarge, ), - onTap: () { - showDialog( - context: context, - builder: (context) => const ChangeLogDialog(), - ); - }, + ), + ListTile( + leading: const Icon(Icons.new_releases_outlined), + title: Text( + localizations.about_release_notes, + style: const TextStyle(fontSize: 18, fontWeight: FontWeight.bold), + ), + subtitle: Text( + localizations.about_release_notes_subtitle, + style: theme.textTheme.bodyLarge, + ), + onTap: () => launchUrlInBrowser( + 'https://docs.fosswarn.org/release_notes/$buildNumber/', + ), ), ListTile( leading: const Icon(Icons.info_outline), diff --git a/lib/widgets/dialogs/change_log_dialog.dart b/lib/widgets/dialogs/change_log_dialog.dart deleted file mode 100644 index 191c2247..00000000 --- a/lib/widgets/dialogs/change_log_dialog.dart +++ /dev/null @@ -1,285 +0,0 @@ -import 'package:flutter/material.dart'; - -class ChangeLogDialog extends StatelessWidget { - const ChangeLogDialog({super.key}); - - @override - Widget build(BuildContext context) { - return AlertDialog( - title: const Text('Changelog'), - content: const SingleChildScrollView( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - Text( - "1.1.0", - style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold), - ), - Text("* add notification filter based on alert categories\n" - "* add feature to get alerts for the current location\n" - "* general improvements \n" - "* bugfixes \n"), - Text( - "1.0.1", - style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold), - ), - Text("* improved workflow for push notifications\n" - "* bugfix for the alert parser for broken alerts \n" - "* bug fixes \n"), - Text( - "1.0.0", - style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold), - ), - Text("* Code refactoring\n" - "* implemented the FOSS Public Alert Server \n" - "* overall improvements of look and feel \n " - "* for the full changelog, please check the GitHub releases \n"), - Text( - "0.8.0 (beta)", - style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold), - ), - Text("* OSM Integration \n" - "* die interne Datenstruktur ist jetzt vollständig CAP \n" - "* Verbesserungen im Error Handling \n " - "* Fehlende Tooltips ergänzt \n" - "* Übersetzungen aktualisiert \n" - "* Fehlerbehebungen \n"), - Text( - "0.7.1 (beta)", - style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold), - ), - Text("* Fehlerbehebungen \n"), - Text( - "0.7.0 (beta)", - style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold), - ), - Text("* Neues Design mit Material 3 \n" - "* Neue Benachrichtigungseinstellungen \n" - "* Fehlerbehebungen \n"), - Text( - "0.6.1 (beta)", - style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold), - ), - Text("* Fehlerbehebungen \n"), - Text( - "0.6.0 (beta)", - style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold), - ), - Text( - "* Der Code ist jetzt neu strukturiert und besser organisiert\n" - "* Die Daten werden jetzt intern besser verwaltet, dadurch müssen die Einstellungen und Orte neu eingestellt werden.\n" - "* Die Sortierung funktioniert jetzt wieder wie erwartet \n" - "* Die App stürzt jetzt bei einem Systemneustart nicht mehr ab. \n" - "* Das Erkennen von Telefonnummern funktioniert jetzt zuverlässiger. \n" - "* sonstige Fehlerbehebungen \n"), - Text( - "0.5.1 (beta)", - style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold), - ), - Text("* Links werden jetzt im externen Browser geöffnet\n" - "* Die Status-Benachrichtigung ist jetzt permanent \n"), - Text( - "0.5.0 (beta)", - style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold), - ), - Text( - "* Die App ist jetzt übersetzt in Fr, En, Uk, De (Danke an die Helfer/innen)\n" - "* kleine Fehlerbehebungen und Verbesserungen \n"), - Text( - "0.4.6 (beta)", - style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold), - ), - Text( - "* Im Einführungsdialog kann man jetzt direkt die Akkuoptimierung ausschalten \n" - "* Die Orte in der Liste haben jetzt ihr Bundesland in Klammern" - " dahinter stehen \n " - "* kleine Anpassungen \n"), - Text( - "0.4.5 (beta)", - style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold), - ), - Text("* Fehlerbehebungen \n" - "* Die Einstellungen sehen jetzt etwas anders aus \n " - "* Datenschutzerklärung aktualisiert \n" - "* Optimierungen \n"), - Text( - "0.4.4 (beta)", - style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold), - ), - Text("* Fehlerbehebungen \n" - "* Die Einstellungen und die Über-Seite sind jetzt über" - " die drei Punkte zu erreichen" - " und nicht mehr über die Navigationsleiste \n"), - Text( - "0.4.3 (beta)", - style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold), - ), - Text("* Fehlerbehebungen \n" - "* Das Design übernimmt jetzt standardmäßig das Systemdesign \n"), - Text( - "0.4.2 (beta)", - style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold), - ), - Text("* falsch angezeigten Verbindungsfehler behoben \n" - "* die Datenabfragefrequenz kann man jetzt auch über eine Texteingabe einstellen \n"), - Text( - "0.4.1 (beta)", - style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold), - ), - Text("* Fehlerbehebungen \n"), - Text( - "0.4.0 (beta)", - style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold), - ), - Text("* Fehlerbehebungen \n" - "* FOSS Warn verwendet jetzt eine andere API \n" - "* FOSS Warn verwendet jetzt eine andere Liste für die Ortschaften \n" - "* Es ist jetzt möglich Warnungen von AlertSwiss zu erhalten (Alpha) \n"), - Text( - "0.3.0 (beta)", - style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold), - ), - Text("* Fehlerbehebungen \n" - "* Man kann jetzt genauer einstellen, für welche Warnungen" - " man eine Benachrichtigung erhalten möchte (wird noch erweitert)\n"), - Text( - "0.2.10 (beta)", - style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold), - ), - Text("* Fehlerbehebungen \n" - "* FOSS Warn verbraucht jetzt weniger Datenvolumen\n" - "* Der Hintergrunddienst sollte jetzt deutlich verlässlicher sein\n"), - Text( - "0.2.9 (beta)", - style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold), - ), - Text("* Fehlerbehebungen \n" - "* Es werden jetzt standardmäßig nicht alle Meldungen angezeigt \n"), - Text( - "0.2.8 (beta)", - style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold), - ), - Text("* Fehlerbehebung für F-Droid \n"), - Text( - "0.2.7 (beta)", - style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold), - ), - Text("* Benachrichtigungen werden jetzt nicht mehr wiederholt \n" - "* kleine Verbesserungen \n" - "* wenn vorhanden, wird jetzt die Gültigkeit der Meldung angezeigt \n"), - Text( - "0.2.6 (beta)", - style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold), - ), - Text("* Legende verbessert\n" - "* Neue Legende für Warntyp hinzugefügt \n" - "* Konsequentere Nutzung des Farbschemas \n" - "* Kleine Verbesserungen \n"), - Text( - "0.2.5 (beta)", - style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold), - ), - Text("* F-Droid Vorbereitungen\n" - "* Legende erweitert \n" - "* kleine Fehlerbehebungen \n"), - Text( - "0.2.4 (beta)", - style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold), - ), - Text("* Lizenzinformationen ergänzt \n" - "* LHP als Quellen hinzugefügt \n" - "* Fehler bei der Liste der Orte korrigiert \n" - "* falsche Farben im Darkmode korrigiert \n" - "* Legende für die Kategorien ergänzt (noch unvollständig) \n"), - Text( - "0.2.3 (beta)", - style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold), - ), - Text("* Hintergrunddienst repariert \n"), - Text( - "0.2.2 (beta)", - style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold), - ), - Text("* Es gibt jetzt einen Darkmode \n" - "* Die Einstellungen haben jetzt eine genauere Beschreibung \n" - "* Die Tags bei den Meldungen werden jetzt umgebrochen \n" - "* E-Mail Adressen in den Warntexten sind jetzt klickbar \n" - "* Die Tags zur Warnstufe und Typ haben jetzt dynamische Farben \n" - "* Die Meldungen können jetzt auch nach der Warnstufe sortiert werden \n" - "* kleine Designverbesserungen \n"), - Text( - "0.2.1 (beta)", - style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold), - ), - Text("* Fehler bei der Schriftgröße korrigiert \n" - "* Datenschutzdialog präzisiert \n "), - Text( - "0.2.0 (beta)", - style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold), - ), - Text( - "* Eine stille Status-Benachrichtigung informiert jetzt über die letzte und nächste Aktualisierung\n* Beim ersten Start erscheint jetzt ein Willkommensdialog\n* Quellenangabe bei DWD Meldungen gefixt \n* In der Warnübersicht wird jetzt das Quellesystem der Meldung angezeigt\n* Die Warnmeldungen können jetzt sortiert werden \n* Fehlerbehebung und kleine Verbesserungen \n* Einstellungen leicht umgestaltet \n* Die Schriftgröße der Meldungen kann jetzt angepasst werden \n* Es gibt jetzt einen Updatechecker \n* In Meldungen eingebettete Bilder können jetzt im Browser geöffnet werden \n* Links in den Warn-Texten sind jetzt klickbar \n", - ), - Text( - "0.1.13 (beta)", - style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold), - ), - Text( - "* Bei Meldungen wird nun auch der Herausgeber der Warnung angezeigt\n* unwichtige Tags können jetzt ausgeblendet werden\n* Warnungen können jetzt geteilt werden \n* Warnungen können jetzt auch mit einem Tip auf die Warnung geöffnet werden\n* Der Zeilenabstand bei der Liste der verfügbaren Orte wurde verringert \n", - ), - Text( - "0.1.12 (beta)", - style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold), - ), - Text("* Tippfehler verbessert \n" - "* Möglichkeit zum Einstellen des Startbildschirms ergänzt \n" - "* gleiche Benachrichtigungen werden jetzt nur einmal angezeigt \n" - "* Benachrichtigungen werden jetzt richtig gruppiert \n" - "* Ort können jetzt auch mit dem Tippen auf den Ortsnamen geöffnet werden. \n"), - Text( - "* Fehler mit doppelt angezeigten Warnungen bei 'meinen Orten' behoben \n " - "* Pull to refresh bei 'Meine Orte' ergänzt \n" - "* Benachrichtigungen werden jetzt abgebrochen," - " wenn die Warnung gelesen wurde - bei mehreren Warnungen" - " für einen Ort durch die letzte Warnung in der Liste. \n"), - Text( - "0.1.11 (beta)", - style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold), - ), - Text("* Fehler behoben wodurch bei einer neuen Installation" - " keine Benachrichtigungen angezeigt wurden.\n " - "* kleine Layoutoptimierung für kleine Bildschirme. \n"), - Text( - "0.1.10 (beta)", - style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold), - ), - Text("* Änderungsprotokoll hinzugefügt\n" - "* Statusanzeige um Fehler beim Auslesen erweitert \n" - "* doppelte Orte aus der Liste entfernt\n " - "* Falsche Zeitangabe korrigiert \n" - "* Breche alle Benachrichtigungen ab, wenn eine Warnung" - " gelesen wurde (noch nicht optimal) \n"), - Text( - "0.1.9 (beta)", - style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold), - ), - Text("* unnötige Schalter entfernt\n" - "* Fehler korrigiert der das parsen abgebrochen hat"), - ], - ), - ), - actions: [ - TextButton( - onPressed: () { - Navigator.of(context).pop(); - }, - child: Text( - 'schließen', - style: TextStyle(color: Theme.of(context).colorScheme.secondary), - ), - ), - ], - ); - } -} From 983e067fd53fb24d49db06b55e672b18d08f3c85 Mon Sep 17 00:00:00 2001 From: Nucleus Date: Sun, 23 Aug 2026 19:51:11 +0200 Subject: [PATCH 3/4] Fix typo in nav translation --- docs/mkdocs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index 533dbdf0..fa34480a 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -77,7 +77,7 @@ plugins: # Navigation (EN) – Übersetzungen nav_translations: Getting Started: Einführung - Installtion: Installation + Installation: Installation Android: Android iOS: iOS Features: Funktionen From b573c9d46fd9f36befa8515b08aa42b3ee4d1222 Mon Sep 17 00:00:00 2001 From: Nucleus Date: Sun, 23 Aug 2026 20:11:09 +0200 Subject: [PATCH 4/4] Fix text overflow --- lib/widgets/dialogs/select_alert_service.dart | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/widgets/dialogs/select_alert_service.dart b/lib/widgets/dialogs/select_alert_service.dart index 7f0f0734..e0bb9454 100644 --- a/lib/widgets/dialogs/select_alert_service.dart +++ b/lib/widgets/dialogs/select_alert_service.dart @@ -33,7 +33,13 @@ class _FontSizeDialogState extends ConsumerState { title: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Text(localizations.alert_service_dialog_title), + Expanded( + child: Text( + localizations.alert_service_dialog_title, + maxLines: 2, + overflow: TextOverflow.ellipsis, + ), + ), IconButton( onPressed: () => launchUrlInBrowser( 'https://docs.fosswarn.org/features/alert_services/',