mirror of
https://github.com/dz0ny/meshcore-sar.git
synced 2026-08-11 16:30:28 +00:00
fix: Hide public channel and show signal pills #123
This commit is contained in:
@@ -429,6 +429,7 @@ class _SettingsScreenState extends State<SettingsScreen> {
|
|||||||
Future<void> _editFastLocationChannel() async {
|
Future<void> _editFastLocationChannel() async {
|
||||||
final channels =
|
final channels =
|
||||||
List<Contact>.from(context.read<ContactsProvider>().channels)
|
List<Contact>.from(context.read<ContactsProvider>().channels)
|
||||||
|
..removeWhere((c) => c.isPublicChannel)
|
||||||
..sort((a, b) {
|
..sort((a, b) {
|
||||||
final aIdx = a.publicKey.length > 1 ? a.publicKey[1] : 0;
|
final aIdx = a.publicKey.length > 1 ? a.publicKey[1] : 0;
|
||||||
final bIdx = b.publicKey.length > 1 ? b.publicKey[1] : 0;
|
final bIdx = b.publicKey.length > 1 ? b.publicKey[1] : 0;
|
||||||
|
|||||||
@@ -157,6 +157,7 @@ class ContactTile extends StatelessWidget {
|
|||||||
icon: Icons.folder_copy_outlined,
|
icon: Icons.folder_copy_outlined,
|
||||||
label: label,
|
label: label,
|
||||||
),
|
),
|
||||||
|
..._buildSignalPills(context),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
if (location != null) ...[
|
if (location != null) ...[
|
||||||
@@ -324,6 +325,34 @@ class ContactTile extends StatelessWidget {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
List<Widget> _buildSignalPills(BuildContext context) {
|
||||||
|
if (!contact.isRepeater && !contact.isSensor) return [];
|
||||||
|
final contactsProvider = context.read<ContactsProvider>();
|
||||||
|
final advert = contactsProvider.pendingAdvertByKey(contact.publicKey);
|
||||||
|
if (advert == null) return [];
|
||||||
|
|
||||||
|
final pills = <Widget>[];
|
||||||
|
if (advert.rxRssiDbm != null) {
|
||||||
|
pills.add(
|
||||||
|
_buildMetaPill(
|
||||||
|
context,
|
||||||
|
icon: Icons.arrow_downward_rounded,
|
||||||
|
label: '${advert.rxRssiDbm} dBm',
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (advert.repeaterLastRssi != null) {
|
||||||
|
pills.add(
|
||||||
|
_buildMetaPill(
|
||||||
|
context,
|
||||||
|
icon: Icons.arrow_upward_rounded,
|
||||||
|
label: '${advert.repeaterLastRssi} dBm',
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return pills;
|
||||||
|
}
|
||||||
|
|
||||||
Widget _buildCompactSubtitle(BuildContext context, String? distanceText) {
|
Widget _buildCompactSubtitle(BuildContext context, String? distanceText) {
|
||||||
final location = contact.displayLocation;
|
final location = contact.displayLocation;
|
||||||
final compactPills = <Widget>[
|
final compactPills = <Widget>[
|
||||||
@@ -338,6 +367,7 @@ class ContactTile extends StatelessWidget {
|
|||||||
icon: Icons.location_disabled_outlined,
|
icon: Icons.location_disabled_outlined,
|
||||||
label: AppLocalizations.of(context)!.noGpsData,
|
label: AppLocalizations.of(context)!.noGpsData,
|
||||||
),
|
),
|
||||||
|
..._buildSignalPills(context),
|
||||||
];
|
];
|
||||||
|
|
||||||
return Padding(
|
return Padding(
|
||||||
|
|||||||
@@ -204,4 +204,43 @@ void main() {
|
|||||||
expect(find.textContaining('Channel 3'), findsNothing);
|
expect(find.textContaining('Channel 3'), findsNothing);
|
||||||
expect(find.text(channel.publicKeyShort.toUpperCase()), findsNothing);
|
expect(find.text(channel.publicKeyShort.toUpperCase()), findsNothing);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
testWidgets('shows contact activity instead of the public key', (
|
||||||
|
tester,
|
||||||
|
) async {
|
||||||
|
final contact = buildContact(
|
||||||
|
name: 'John Smith',
|
||||||
|
type: ContactType.chat,
|
||||||
|
secondByte: 4,
|
||||||
|
);
|
||||||
|
final messagesProvider = MessagesProvider()
|
||||||
|
..addMessage(
|
||||||
|
Message(
|
||||||
|
id: 'contact-activity',
|
||||||
|
messageType: MessageType.contact,
|
||||||
|
recipientPublicKey: contact.publicKey,
|
||||||
|
pathLen: 1,
|
||||||
|
textType: MessageTextType.plain,
|
||||||
|
senderTimestamp:
|
||||||
|
DateTime.now()
|
||||||
|
.subtract(const Duration(hours: 2))
|
||||||
|
.millisecondsSinceEpoch ~/
|
||||||
|
1000,
|
||||||
|
text: 'check-in',
|
||||||
|
receivedAt: DateTime.now().subtract(const Duration(hours: 2)),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
await pumpSheet(
|
||||||
|
tester,
|
||||||
|
contacts: [contact],
|
||||||
|
channels: const [],
|
||||||
|
messagesProvider: messagesProvider,
|
||||||
|
showAllOption: false,
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(find.text('John Smith'), findsOneWidget);
|
||||||
|
expect(find.text('2h ago'), findsOneWidget);
|
||||||
|
expect(find.text(contact.publicKeyShort), findsNothing);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user