Replace source/license links with website link on About screen

Remove the source-code link and AGPL license row, and point users to
the project website (https://oott-security.net) instead.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
rzuasti
2026-06-12 10:00:15 -04:00
co-authored by Claude Opus 4.8
parent d30130ed01
commit 46d0778ebc
3 changed files with 18 additions and 86 deletions
+1 -1
View File
@@ -30,7 +30,7 @@
## Frontend ## Frontend
- [ ] Add more themes (Dracula, Nord, Catppuccin Latte, Gruvbox light) - [ ] Add more themes (Dracula, Nord, Catppuccin Latte, Gruvbox light)
- [ ] Remove the license and notice from the UI, just link to the github pages - [x] Remove the license and notice from the UI, just link to the github pages
- [ ] In the status screen, change the order of the scanners so that SNMP is second - [ ] In the status screen, change the order of the scanners so that SNMP is second
- [ ] On Android, make the font of the icon (phone screen) bigger - [ ] On Android, make the font of the icon (phone screen) bigger
- [x] In the status screen, the "listening for" property of passive scanners should change to days and months (now its always minutes) - [x] In the status screen, the "listening for" property of passive scanners should change to days and months (now its always minutes)
+13 -84
View File
@@ -7,9 +7,7 @@ import '../theme/dimens.dart';
// The version is read at runtime from the bundled package metadata // The version is read at runtime from the bundled package metadata
// (frontend/pubspec.yaml), so it never needs to be hand-edited here. // (frontend/pubspec.yaml), so it never needs to be hand-edited here.
const _releaseDate = 'June 9, 2026'; const _releaseDate = 'June 9, 2026';
const _repoUrl = 'https://github.com/rzuasti/oott'; const _websiteUrl = 'https://oott-security.net';
const _licenseUrl = 'https://www.gnu.org/licenses/agpl-3.0.html';
const _licenseName = 'GNU Affero General Public License v3 (AGPL-3.0)';
class About extends StatelessWidget { class About extends StatelessWidget {
const About({super.key}); const About({super.key});
@@ -48,23 +46,11 @@ class About extends StatelessWidget {
const SizedBox(height: Insets.xxl), const SizedBox(height: Insets.xxl),
_SurfaceContainer( _SurfaceContainer(
colorScheme: colorScheme, colorScheme: colorScheme,
child: Column( child: _LinkRow(
children: [ label: 'Check out our website and Git repo here',
_LinkRow( url: _websiteUrl,
icon: Icons.code, colorScheme: colorScheme,
label: 'Source code', textTheme: textTheme,
url: _repoUrl,
colorScheme: colorScheme,
textTheme: textTheme,
),
Divider(
height: 1,
color: colorScheme.outlineVariant,
indent: Insets.lg,
endIndent: Insets.lg,
),
_LicenseRow(colorScheme: colorScheme, textTheme: textTheme),
],
), ),
), ),
const SizedBox(height: Insets.lg), const SizedBox(height: Insets.lg),
@@ -107,14 +93,12 @@ class _SurfaceContainer extends StatelessWidget {
class _LinkRow extends StatelessWidget { class _LinkRow extends StatelessWidget {
const _LinkRow({ const _LinkRow({
required this.icon,
required this.label, required this.label,
required this.url, required this.url,
required this.colorScheme, required this.colorScheme,
required this.textTheme, required this.textTheme,
}); });
final IconData icon;
final String label; final String label;
final String url; final String url;
final ColorScheme colorScheme; final ColorScheme colorScheme;
@@ -136,69 +120,14 @@ class _LinkRow extends StatelessWidget {
vertical: Insets.md, vertical: Insets.md,
horizontal: Insets.lg, horizontal: Insets.lg,
), ),
child: Row( child: Text(
children: [ label,
Icon(icon, size: 18, color: colorScheme.primary), style: textTheme.bodyMedium?.copyWith(
const SizedBox(width: Insets.md), color: colorScheme.primary,
Text( decoration: TextDecoration.underline,
label, decorationColor: colorScheme.primary,
style: textTheme.bodyMedium?.copyWith(
color: colorScheme.primary,
decoration: TextDecoration.underline,
decorationColor: colorScheme.primary,
),
),
],
),
),
);
}
}
class _LicenseRow extends StatelessWidget {
const _LicenseRow({required this.colorScheme, required this.textTheme});
final ColorScheme colorScheme;
final TextTheme textTheme;
Future<void> _open() async {
final uri = Uri.parse(_licenseUrl);
if (await canLaunchUrl(uri)) {
await launchUrl(uri, mode: LaunchMode.externalApplication);
}
}
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.symmetric(
vertical: Insets.md,
horizontal: Insets.lg,
),
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Icon(Icons.gavel, size: 18, color: colorScheme.primary),
const SizedBox(width: Insets.md),
Flexible(
child: Wrap(
children: [
Text('Licensed under ', style: textTheme.bodyMedium),
InkWell(
onTap: _open,
child: Text(
_licenseName,
style: textTheme.bodyMedium?.copyWith(
color: colorScheme.primary,
decoration: TextDecoration.underline,
decorationColor: colorScheme.primary,
),
),
),
],
),
), ),
], ),
), ),
); );
} }
+4 -1
View File
@@ -19,7 +19,10 @@ void main() {
// Assert the fallback prefix only, not the release date literal (it changes // Assert the fallback prefix only, not the release date literal (it changes
// every release). // every release).
expect(find.textContaining('Released'), findsOneWidget); expect(find.textContaining('Released'), findsOneWidget);
expect(find.text('Source code'), findsOneWidget); expect(
find.text('Check out our website and Git repo here'),
findsOneWidget,
);
expect(find.text('openssl'), findsOneWidget); expect(find.text('openssl'), findsOneWidget);
}); });
} }