columba/python
torlando-tech c36afe7c36 feat: add Sideband contact import support
Enable importing contacts using only a 32-character destination hash
from Sideband's "Copy Address" feature, in addition to full lxma:// URLs.

Key changes:
- Add ContactStatus enum (ACTIVE, PENDING_IDENTITY, UNRESOLVED)
- Make publicKey nullable in ContactEntity for pending contacts
- Add parseIdentityInput() to InputValidator for flexible input parsing
- Add IdentityResolutionManager for background identity resolution
- Check existing announces when adding hash-only contacts
- Update UI with pending/unresolved status indicators
- Add PendingContactBottomSheet for managing unresolved contacts
- Hook announce callbacks for instant resolution when peer announces
- Add recallIdentity() AIDL method to check Reticulum's identity cache
- Database migration 17->18 for new schema

The flow:
1. User pastes 32-char hash -> check announces table for existing identity
2. If found -> add as ACTIVE contact immediately
3. If not found -> add as PENDING_IDENTITY, background resolution kicks in
4. When announce received -> instantly resolve pending contact
5. After 48h timeout -> mark as UNRESOLVED with retry option

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-04 10:20:51 -05:00
..
ble_modules initial commit 2025-11-30 19:59:14 -05:00
drivers initial commit 2025-11-30 19:59:14 -05:00
patches initial commit 2025-11-30 19:59:14 -05:00
android_ble_interface.py initial commit 2025-11-30 19:59:14 -05:00
logging_utils.py initial commit 2025-11-30 19:59:14 -05:00
requirements.txt initial commit 2025-11-30 19:59:14 -05:00
reticulum_wrapper.py feat: add Sideband contact import support 2025-12-04 10:20:51 -05:00
test_android_ble_driver.py initial commit 2025-11-30 19:59:14 -05:00
test_announce_handler.py initial commit 2025-11-30 19:59:14 -05:00