v1.4.2: LXMF interop fix, UI redesign, radio defaults

- Fix LXMF wire format: standardize on opportunistic [src:16][sig:64][content]
- Fix LXMF signature: sign(dest||src||packed) per spec, remove message_hash
- Fix MsgPack interop: handle both str and bin types for title/content
- Radio defaults changed to Balanced preset (SF9/BW250k/CR5/TX14)
- Messages screen: sorted by most recent, preview with You:/Them:, green unread dot, timestamps
- Status bar: replace LoRa/BLE/WiFi text with signal bars (green=connected, red=offline)
- Home screen: remove Unread info (shown in Messages tab)
- Contacts screen added (Friends tab)
- Identity manager: multi-slot identity support with per-slot display names
- Message store: fix peer hash truncation, SD directory creation, .bak file leak
- Settings: check for updates, active identity display, info diagnostics
This commit is contained in:
dude.eth
2026-03-07 17:03:34 -07:00
parent 07025bfa23
commit a32182140d
33 changed files with 962 additions and 203 deletions
+12 -1
View File
@@ -61,7 +61,7 @@ int IdentityManager::createIdentity(const String& displayName) {
IdentitySlot slot;
slot.hash = newId.hexhash();
slot.displayName = displayName;
slot.displayName = ""; // New identity starts unnamed
slot.keyPath = keyPath;
slot.active = false;
_slots.push_back(slot);
@@ -133,6 +133,17 @@ void IdentityManager::setDisplayName(int index, const String& name) {
saveSlotMeta();
}
String IdentityManager::getDisplayName(int index) const {
if (index < 0 || index >= (int)_slots.size()) return "";
return _slots[index].displayName;
}
bool IdentityManager::syncNameFromActive(String& outName) const {
if (_activeIdx < 0 || _activeIdx >= (int)_slots.size()) return false;
outName = _slots[_activeIdx].displayName;
return true;
}
void IdentityManager::refresh() {
loadSlotMeta();
}