From 6f32a793e8cb6d5875110a64b697edd40b5fe317 Mon Sep 17 00:00:00 2001 From: ZIER Date: Tue, 7 Apr 2026 10:25:51 +0200 Subject: [PATCH] disable location sharing if setting is not enabled. --- lib/screens/channel_chat_screen.dart | 18 ++++++++++++++++++ lib/screens/chat_screen.dart | 18 ++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/lib/screens/channel_chat_screen.dart b/lib/screens/channel_chat_screen.dart index 1456902..73e92cd 100644 --- a/lib/screens/channel_chat_screen.dart +++ b/lib/screens/channel_chat_screen.dart @@ -938,6 +938,14 @@ class _ChannelChatScreenState extends State { Future _shareLocation() async { final connector = context.read(); + final isGpsEnabled = connector.currentCustomVars?['gps'] == '1'; + if (!isGpsEnabled) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text(context.l10n.chat_locationUnavailable)), + ); + return; + } + final lat = connector.selfLatitude; final lon = connector.selfLongitude; if (lat == null || lon == null) { @@ -1142,6 +1150,7 @@ class _ChannelChatScreenState extends State { Widget _buildMessageComposer() { final connector = context.watch(); + final isGpsEnabled = connector.currentCustomVars?['gps'] == '1'; final maxBytes = maxChannelMessageBytes(connector.selfName); final smazEncoder = connector.isChannelSmazEnabled(widget.channel.index) ? Smaz.encodeIfSmaller @@ -1185,12 +1194,21 @@ class _ChannelChatScreenState extends State { } else if (action == _ChannelChatInputAction.insertEmoji) { _showEmojiPickerForComposer(context); } else if (action == _ChannelChatInputAction.shareLocation) { + if (!isGpsEnabled) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text(context.l10n.chat_locationUnavailable), + ), + ); + return; + } _shareLocation(); } }, itemBuilder: (context) => [ PopupMenuItem( value: _ChannelChatInputAction.shareLocation, + enabled: isGpsEnabled, child: Row( children: [ const Icon(Icons.location_on, size: 20), diff --git a/lib/screens/chat_screen.dart b/lib/screens/chat_screen.dart index 9637d62..0bbafba 100644 --- a/lib/screens/chat_screen.dart +++ b/lib/screens/chat_screen.dart @@ -499,6 +499,7 @@ class _ChatScreenState extends State { } Widget _buildInputBar(MeshCoreConnector connector) { + final isGpsEnabled = connector.currentCustomVars?['gps'] == '1'; final maxBytes = maxContactMessageBytes(); final colorScheme = Theme.of(context).colorScheme; final smazEncoder = @@ -527,12 +528,21 @@ class _ChatScreenState extends State { } else if (action == _ChatInputAction.insertEmoji) { _showEmojiPicker(context); } else if (action == _ChatInputAction.shareLocation) { + if (!isGpsEnabled) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text(context.l10n.chat_locationUnavailable), + ), + ); + return; + } _shareLocation(context.read()); } }, itemBuilder: (context) => [ PopupMenuItem( value: _ChatInputAction.shareLocation, + enabled: isGpsEnabled, child: Row( children: [ const Icon(Icons.my_location, size: 20), @@ -688,6 +698,14 @@ class _ChatScreenState extends State { } Future _shareLocation(MeshCoreConnector connector) async { + final isGpsEnabled = connector.currentCustomVars?['gps'] == '1'; + if (!isGpsEnabled) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text(context.l10n.chat_locationUnavailable)), + ); + return; + } + final lat = connector.selfLatitude; final lon = connector.selfLongitude; if (lat == null || lon == null) {